移动文件/目录但仍然可以轻松合并更改?

时间:2009-11-15 23:57:40

标签: git merge rename

我已经在各种常见问题解答中看到git没有明确跟踪重命名/移动,更喜欢寻找相同(或在某些情况下类似的?)文件。这很好,但它会应对这种情况:朋友的远程存储库有一个新功能(i18n)涉及debian/po/*.po的一些新文件。我有自己的这个项目的分支,并希望合并这个功能,但把文件放在po/*.po(我可以做两个提交,或任何必要的)。我希望远程仓库将继续接收该功能的更新,我想合并/樱桃选择这些提交并将它们应用于我新位置的文件。 git可以做到这一点,或许可以通过某种映射“这些文件现在已经移到这里”了吗?或者它是否比它的价值更痛苦,我应该接受我的回购中稍微奇怪的debian路径?

3 个答案:

答案 0 :(得分:45)

使用git mv,一切都将是AOK。

为什么不试试而不是问?你总是可以在git中轻松重置。 :)

答案 1 :(得分:3)

Git缺少一种机制来表明你在两个项目/分支机构之间进行差异时,希望有路径重命名和更新。

有各种文件重命名选项可用(例如-M和--patience),但可能很慢。

如前所述,路径重命名不会影响存储库本身,因为它只是内容(blob)和结构(树节点)的快照。如果您所做的只是添加了一个额外的顶级目录,那么下面的所有树和blob都将保持不变,并且不需要额外的存储空间。您只需要提交的一个树节点和新tld的一个树节点。容易死。 Git处理那部分没问题。

只有当您想进行重要的比较(和任何补丁)时才会这样。如果说-P选项表明您希望某些路径重命名,diff可以轻松应对,那就太棒了。看到200个文件删除和200个新文件并不好; - )

找出如何添加-P选项是另一个“待办事项”列表项(我希望我有时间)。

答案 2 :(得分:2)

或者,使用mv重命名文件,并调用git add --all以暂存所有删除操作并添加未跟踪文件(新文件名)。如果没有--all,则必须单独显式删除删除操作和新文件名。也不要使用git add --update,因为这将暂存所有删除操作,但不会添加新文件名。

请注意,您可能希望在本地分支中执行这些操作,这样您就不会无意中push将它们发送到您朋友的主分支,或者您的朋友不会pull将它们放入他的主分支。