虽然我在所有项目中使用git,但有时候,我必须与不使用git的同事合作。他们喜欢来回发送他们的压缩源。这很麻烦,很麻烦,但我必须处理它。工作流程如下:
当他们需要我的代码时,我会使用git archive
并向他们发送一个Zip文件export.zip
。我继续工作并提交我做的更改,而他们使用我过时的来源。插图:
┌ archive & mail
│
A ← B ← C
└───┴── my later changes
一段时间后,他们将回复文件发送给我import.zip
。 将Zip文件导入我的git树以及如何实现它的最佳方法是什么?我可以想到以下三个选项,它们在语义上有所不同:
根据他们的更改考虑我以后的更改:
┌ archive & mail
│
A ← A' ← B ← C
│ └───┴── my later changes
│
└─ their changes
在这里,我会结帐A
,解压缩import.zip
,提交为A'
,然后重新申请B
和C
(以及随后的内容)。如何重新申请提交至HEAD
?
根据我后来的更改来考虑他们的更改:
A ← B ← C ← A'
在这里,我将基于A
和import.zip
之间的差异创建补丁,并将其应用于C
。
创建分支并合并:
A ← B ← C ← M
↖ ↙
A'
在写这个问题时,我得出结论,这个选项是最普遍适用的,也是最强大的。你同意吗?
我也非常感谢有关该工作流程的其他建议。例如,我发现记住我存档的提交A
很乏味且容易出错。
答案 0 :(得分:3)
你是对的,#3是最好的。我会为每个可能发送更改的人创建一个分支。签出他们的分支,解压缩归档,并将更改提交到他们的分支。在某些时候,你可以将你的更改和他们的更改合并在一起,git会指出你的冲突,这显然不是最佳的,但考虑到你正在处理邮件拉链周围的人,相对正常。当您准备好向他们发送最近的更改时,我建议您将正在归档的提交标记为&#34; collab-zip-<date>
&#34;或其他东西,带有标记消息,表示&#34;发送更改为X,因为Y&#34;。这回答了你关于如何跟踪你发送的内容的最后一点。
答案 1 :(得分:1)
我发现记住我存档的提交
A
很乏味且容易出错。
建立一个export
分支,并在另一个分支上开展工作。只要您准备好发送给同事,您就可以将最新版本合并到export
并归档。我建议将它与选项#3结合使用。
而且你也忘了选项#4:说服你的同事使用Git提供帮助他们设置并开始使用它。教一个人钓鱼等等。
答案 2 :(得分:1)
正如其他人已经指出的那样,#3是第二好的*解决方案。它与使用Git的时间大致相同,只有这样你才能合并远程分支而不是本地分支,并且它们可能有多个提交而不是一个。
你当然可以根据他们的更改(根据你的第一个选项)重新提交你的提交,但是那时你将重写历史记录,这将引入许多其他问题。
我真的不建议使用手动补丁(选项#2)。 Git有一个非常好的merge
工具,专为这些情况而设计。
*:最好的解决方案仍然是说服你的同事开始使用Git。现在,由于他们的偏好,您需要花费大量的时间和精力。如果他们不愿意听你的话,只需和你的老板谈谈,并告诉他你因为他们的固执而浪费了很多时间,并且它带来了更高的引入漏洞的风险,并且(我想你可以拿出一些更多的论据来说服他节省一些钱)。