git clone --bare git@github.com:FraserYu/amend-crash-demo.git .bare
我们还要在当前目录下创建一个
.git
文件,文件内容是以
gitdir
的形式指向我们的
.bare
文件夹 (如果不理解 gitdir 的含义,请回看 Git Worktree 大法真香 )
echo “gitdir: ./.bare” > .git
然后我们要编辑 .bare/config 文件,并修改
[remote "origin"]
内容,和下面内容保持一致(也就是添加第 6 行内容),这确保我们创建 worktree 切换分支,可以显示正确的分支名称
vim .bare/config
-----------------------------------------------
[remote “origin”]
url = git@github.com:FraserYu/amend-crash-demo.git
fetch = +refs/heads/:refs/remotes/origin/
接下来我们就可以创建 worktree 了,首先我们要为 main 分支创建 worktree,因为 main 分支 HEAD 的指向的 commit-ish 就是你创建其他 worktree 的 commit-ish
git worktree add main
--------------------------------
Preparing worktree (checking out ‘main’)
HEAD is now at 82b8711 add main file
通常我们不会直接在 main 分支上直接工作,而是创建其它类型的分支,继续创建名为
feature/JIRA234-feature3
的 worktree
git worktree add -b “feature/JIRA234-feature3” feature3
------------------------------------------------
Preparing worktree (new branch ‘feature/JIRA234-feature3’)
HEAD is now at 82b8711 add main file
查看当前文件夹的内容,你会发现只有
main
和
feature3
两个文件夹(因为
.bare
和
.git
是隐藏文件夹/文件),这样是不是相当清爽呢?
ls -l
-------------------------------------------
total 0
drwxr-xr-x 10 rgyb staff 320 Nov 23 21:44 feature3
drwxr-xr-x 10 rgyb staff 320 Nov 23 21:36 main
ls -al
-------------------------------------------
total 8
drwxr-xr-x 6 rgyb staff 192 Nov 23 21:44 .
drwxr-xr-x 3 rgyb staff 96 Nov 23 21:14 …
drwxr-xr-x 12 rgyb staff 384 Nov 23 21:36 .bare
-rw-r–r-- 1 rgyb staff 16 Nov 23 21:29 .git
drwxr-xr-x 10 rgyb staff 320 Nov 23 21:44 feature3
drwxr-xr-x 10 rgyb staff 320 Nov 23 21:36 main
接下来就可以尽情的在我们的各种分支上,彼此互不影响的进行
add
/
commit
/
pull
/
push
操作了
echo “feature3 development” > feature3.yaml
git add feature3.yaml
git commit -m “feat: [JIRA234-feature3] feature3 development”
------------------------------------------------------------------
[feature/JIRA234-feature3 aeaac94] feat: [JIRA234-feature3] feature3 development
1 file changed, 1 insertion(+)
create mode 100644 feature3.yaml
git push --set-upstream origin feature/JIRA234-feature3
通过上一篇文章 worktree 的四个命令,多分支协同开发不再是问题:
git worktree add
git worktree list
------------------------------------------------------------------------------------------------
/Users/rgyb/Documents/projects/amend-crash-demo/.bare (bare)
/Users/rgyb/Documents/projects/amend-crash-demo/feature3 aeaac94 [feature/JIRA234-feature3]
/Users/rgyb/Documents/projects/amend-crash-demo/main 82b8711 [main]
git worktree remove
git worktree prune
总结
通过借助 bare repo 的特性,我们可以非常整洁的将所有 worktree 只管理在当前项目目录下,多分支协同开发,就像这样:
.
└── amend-crash-demo
├── feature3
│ ├── README.md
│ ├── config.yaml
│ ├── feat1.txt
│ ├── feature3.yaml
│ ├── file1.yaml
│ ├── hotfix.yaml
│ ├── main.properties
│ └── main.yaml
└── main
├── README.md
├── config.yaml
├── feat1.txt
├── file1.yaml
├── hotfix.yaml
├── main.properties
└── main.yaml
3 directories, 15 files
如果你有磁盘管理强迫症,这绝对是个好办法。
如果你想更好的理解整个过程,你需要在操作本文命令的同时,查看 Git 相关的文件信息
有什么问题,留言区交流
参考
最后
笔者已经把面试题和答案整理成了面试专题文档
档**
[外链图片转存中…(img-ugG9q2Z1-1714292417750)]
[外链图片转存中…(img-6eturU0S-1714292417751)]
[外链图片转存中…(img-jMejvj0A-1714292417752)]
[外链图片转存中…(img-erPB70lj-1714292417752)]
[外链图片转存中…(img-na7yQyly-1714292417753)]
[外链图片转存中…(img-nZl9kI9q-1714292417753)]
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录
版权归原作者 peixianchacha 所有, 如有侵权,请联系我们删除。