我目前有一个带有中央裸存储库的 Git 设置,两个开发人员通过远程存储库访问该存储库。当我创建一个分支然后尝试将该分支从远程存储库推送到中央裸存储库时,我遇到了一个问题,类似于这篇文章中的内容。
我读过跟踪分支是最好的方法,但是我正在阅读的使用 Git 的版本控制一书说,跟踪分支旨在跟踪来自另一个存储库的更改,它们不应该用于合并并提交。
根据我目前的设置,处理不同分支的最佳方法是什么?
我一直打算为软件的每个版本/发行版创建一个分支,但似乎最简单的方法是为每个版本/发行版创建一个单独的存储库。
我目前有一个带有中央裸存储库的 Git 设置,两个开发人员通过远程存储库访问该存储库。当我创建一个分支然后尝试将该分支从远程存储库推送到中央裸存储库时,我遇到了一个问题,类似于这篇文章中的内容。
我读过跟踪分支是最好的方法,但是我正在阅读的使用 Git 的版本控制一书说,跟踪分支旨在跟踪来自另一个存储库的更改,它们不应该用于合并并提交。
根据我目前的设置,处理不同分支的最佳方法是什么?
我一直打算为软件的每个版本/发行版创建一个分支,但似乎最简单的方法是为每个版本/发行版创建一个单独的存储库。
首先:您不需要为每个版本的软件创建自己的存储库。如果你发布,创建一个标签,这就是你所需要的。参考这个标签,你总是可以回到发布的版本。
如果您有一个中央存储库,允许您的两个开发人员中的每一个推送到该存储库,那么您必须将该存储库设为一个裸存储库(就像您引用的问题建议中接受的答案一样)。
裸存储库没有签出的工作副本,因此您可以随时推送到它们(至少只要您之前获取最新版本)。
但是您的情况听起来有点不同:例如,如果您有两台计算机,每台计算机都携带一个工作副本,并且想要在这两个盒子之间推/拉,则解决方案是有一个仅在推送到主服务器时使用的分支从另一台计算机。
以下工作流程(假设您要将分支的更改推送到当前已签出分支myfeature的notebook远程:desktopmyfeature
开desktop:
git checkout -b temp
然后,在notebook:
git push desktop myfeature:myfeature
回到desktop:
git checkout myfeature
git branch -D temp
就是这样。
另一种选择(在两个开发人员(alice 和 bob)在同一个分支上工作的情况下)是——如果 bob 想要从 alice 获取最新版本myfeature——他从 alice中提取更改,而不是让她将更改推送到他的回购。假设 alice 的计算机在 bob 的 repo 中配置为远程alice,并且 bob 当前已签出myfeature分支。
鲍勃都可以
git pull alice
ifalice/myfeature被配置为他的分支的跟踪分支myfeature(用 设置它git branch --set-upstream myfeature alice/myfeature)。或者
git fetch alice
git merge alice/myfeature
如果 alice 的myfeature分支未配置为跟踪分支。