20

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

4

3 回答 3

45

使用git mv,一切都会好的。

为什么不直接尝试而不是询问?您可以随时在 git 中轻松重置。:)

于 2009-11-16T00:06:34.100 回答
3

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

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

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

只有当您想要进行比较(和任何补丁)时才重要。最好有一个-P选项表明您期望一些路径重命名,diff从而轻松应对。看到 200 个文件删除和 200 个新文件并不好;-)

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

于 2011-06-18T16:47:05.560 回答
2

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

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

于 2009-11-17T22:28:08.273 回答