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