Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 移动文件/目录,但仍然可以轻松合并更改?_Git_Merge_Rename - Fatal编程技术网

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

Git 移动文件/目录,但仍然可以轻松合并更改?,git,merge,rename,Git,Merge,Rename,我在各种常见问题解答中读到,git没有明确跟踪重命名/移动,更喜欢查找相同(或在某些情况下类似)的文件。这很好,但它能应付这种情况吗:朋友的远程存储库有一个新功能(i18n),涉及一些位于debian/po/*.po的新文件。我有自己的项目分支,希望合并此功能,但只将文件放在po/*.po(我可以作为两次提交或任何必要的操作来完成)。我希望远程回购将继续接收该功能的更新,我只想合并/挑选这些提交,并将它们应用到我新位置的文件中。git能做到这一点吗,也许可以通过某种映射“这些文件现在已经移到这里

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

使用
git mv
,一切都会好起来


为什么不试试,而不是问?您始终可以在git中轻松重置。:)

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


请注意,您可能希望在本地分支中执行这些操作,这样您就不会无意中将它们推送到朋友的主分支,或者朋友不会将它们拉到自己的主分支中。

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

有多种文件重命名选项可用(如-M和--patience),但速度可能较慢

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

只有当您想要进行比较(以及任何补丁)时,它才有意义。如果有一个
-P
选项,表示您希望一些路径重命名,并且
diff
可以轻松处理,那就太好了。看到200个文件删除和200个新文件不太好;-)


找出如何添加a-p选项是我的另一个“待办事项”列表项目(我希望我能有时间来做)。

好吧,我只是想看看是否有人指出,如果在远程回购中发生了我没有尝试过的奇怪事情,并且我在进行移动或合并时没有弄出正确的魔法鸡,以后可能会出现什么问题。我只使用了几周git,仍然有(不)健康剂量的妄想症,这是由较少的VCS遗留下来的。:-)如果文件之间存在很大的分歧,那么它将很难跟踪更改,但无论您是否重命名它,它都会有问题;)谢谢,到目前为止,它确实看起来还不错。仅供参考:“git mv”与自己重命名文件并提交这样的更改没有什么不同。更简单。有一些问题,请看: