我有一个具有以下文件夹结构的 Git 存储库:
allprojectfiles
--otherfolders
--source
----projectname
------projectname
---------git initilalized here
---------otherfolders
---------workingonthesefiles(bound to remote)
我可以重组项目以从allprojectfiles文件夹中跟踪 Git 而不会丢失历史记录吗?
我有一个具有以下文件夹结构的 Git 存储库:
allprojectfiles
--otherfolders
--source
----projectname
------projectname
---------git initilalized here
---------otherfolders
---------workingonthesefiles(bound to remote)
我可以重组项目以从allprojectfiles文件夹中跟踪 Git 而不会丢失历史记录吗?
Git 唯一的文件夹跟踪是在树提交中。因此,在一般情况下,您可以自由移动文件夹,Git 只会将新树写入存储库。
我建议使用git mv
在其他干净的工作树中暂存这些目录移动。如果您没有为提交准备任何文件级更改,那么 Git 历史记录将正确地将您的新结构视为移动/重命名,而不是添加/删除操作。
git 不会显式跟踪重命名。确保有一个提交除了移动之外什么都不做(这将是在另一条路径上的删除+添加)。然后 git 命令将自动检测移动,但有时(例如,如果两个文件具有相同的内容,但从逻辑上您可以分辨出哪个文件被重命名)它将无法跟踪正确的历史记录。我不认为你可以在不重写历史的情况下避免这种情况。
这让我想到了一个想法:使用 git filter-branch 应该可以将文件夹提取到另一个位置,即新布局中的“正确”位置,然后重新添加其余部分。不过,这将完全改写你的历史。