Git Worktree 高级使用,这样清爽多了|新技能

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 相关的文件信息

有什么问题,留言区交流

参考

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

档**

[外链图片转存中…(img-ugG9q2Z1-1714292417750)]

[外链图片转存中…(img-6eturU0S-1714292417751)]

[外链图片转存中…(img-jMejvj0A-1714292417752)]

[外链图片转存中…(img-erPB70lj-1714292417752)]

[外链图片转存中…(img-na7yQyly-1714292417753)]

[外链图片转存中…(img-nZl9kI9q-1714292417753)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值