【发布时间】:2021-10-15 20:46:39
【问题描述】:
我有一个大型 repo,它也连接到远程存储库。
我想重新安排它,但我不想将这些更改应用到当前目录,所以我创建了一个新的本地目录,一个新的空远程存储库。
我将当前的存储库镜像到新的空远程存储库。
然后,我将新的空目录连接到该 repostiroy 和 git pull 它。
现在我在本地新存储库中拥有了我的存储库的完整副本。
我想重新安排它,并将一些文件移入/移出当前目录。
问题是当我这样做时,然后commit & push 到远程存储库,我看到所有的提交历史在它移动到另一个位置后都被删除了。
当我编辑文件但将它们保留在当前位置,然后 commit & push 时,更改会上传并保留提交历史记录。
所以只有当我将文件移动到镜像存储库中的其他目录时才会出现问题。
即使我移动文件,有什么方法可以保留在镜像之前提交的提交历史记录?
谢谢。
【问题讨论】:
-
关于 git 和重命名/移动的一般提示。您应该将文件的重命名和移动与文件内容的更改分开提交。例如,如果您正在执行 C#,它在文件中具有命名空间信息,通常对应于磁盘上的文件夹结构,如果您打算将文件移动到不同的文件夹/命名空间,那么您应该与修复命名空间分开提交移动里面。这样做的原因是,当文件被移动/重命名时,git 使用启发式方法来查找可能的来源,如果文件也发生了很大变化,它可能无法找到。
-
是的,我知道。我只是想
move他们,而不改变他们。而且,它仍然删除了在mirror之前所做的所有提交历史记录 -
当你说“所有的提交历史都被删除”时,你能详细说明一下吗?你到底在看什么? Git 不会删除提交历史记录(这在很大程度上会破坏目的),但是如果您尝试通过重命名跟踪对特定文件的更改,则需要运行类似
git log --follow path/to/file的内容(默认情况下,git log不跟随重命名)。 -
@larsks 好的,所以我的原始仓库位于
gitlab。我将它镜像到github上的一个空仓库,然后将该仓库(从 github 拉出)拉到一个空的本地 git 仓库。然后我试图重新安排它:移动一些文件。然后我提交并推送更改(这些文件的新文件位置)。然后,当我查看在github上所做的更改并查看这些文件的提交历史记录(这些文件已移出其原始位置)时,我看不到任何提交历史记录。在原始 repo 上的mirror之前创建的历史记录。 -
我认为 github 没有跟踪文件重命名的机制。
标签: git github gitlab git-commit git-push