Git 吉特。更改存储库根文件夹
我的项目在文件夹Git 吉特。更改存储库根文件夹,git,Git,我的项目在文件夹C:/projects/NameOfProject/MyCode/中,而.git位于文件夹MyCode/中,所以存储库中只有MyCode的内容 最近,我在文件夹OtherFiles/中添加了一些与文件夹NameOfProject/中的项目相关的其他文件。由于MyCode/中的文件与OtherFiles/中的文件之间的关系,我无法将这些文件移动到MyCode/。现在我需要以某种方式更改存储库设置,文件夹MyCode/和OtherFiles/将位于存储库的根目录下。而且,非常需要继续
C:/projects/NameOfProject/MyCode/
中,而.git
位于文件夹MyCode/
中,所以存储库中只有MyCode的内容
最近,我在文件夹OtherFiles/
中添加了一些与文件夹NameOfProject/
中的项目相关的其他文件。由于MyCode/
中的文件与OtherFiles/
中的文件之间的关系,我无法将这些文件移动到MyCode/
。现在我需要以某种方式更改存储库设置,文件夹MyCode/
和OtherFiles/
将位于存储库的根目录下。而且,非常需要继续提交历史记录:更改存储库根之后的下一次提交将保留当前分支的历史记录
总结以上内容:我在C:/projects/NameOfProject/MyCode/
中有repo,我想将repo根目录移动到C:/projects/NameOfProject/
中,而不是移动这两个文件夹中的文件/子文件夹
如何实现这一点?您可以在C:/projects/name of project/by下初始化新回购协议 git初始化
然后将远程分支拉到该repo下,只需将这两个文件夹MyCode和其他文件复制并替换到初始化的git repo中,然后将其推送到远程。您需要使用
git filter branch
重写整个NameOfProject/MyCode/
存储库中的目录名。我建议这样做:
MyCode
复制到临时位置git过滤器分支--树过滤器'mkdir MyCode&&mv*MyCode | |:'--所有
。过滤器将重写所有分支;对于每个现有提交,它将创建一个新的子目录MyCode
,并将所有文件移动到其中(忽略错误;至少会有一个错误-无法将MyCode移动到MyCode
)。这是整个过程的主要部分,;它使存储库准备使用子目录MyCode
中的所有文件,而不是存储库的根目录,但保留提交历史记录.git
目录移动到C:/projects/NameOfProject/
(不要移动到MyCode
!)和cleanup temp dirMyCode/.git
git添加其他文件
git提交-m其他文件
但是这会为MyCode保存他的提交历史吗?当然会。因为我们把远程分支拉到了这个回购协议上。那是行不通的。如果将
C:/projects/NameOfProject/MyCode/
拉入C:/projects/NameOfProject/
git,它只会将文件从NameOfProject/MyCode/
复制到NameOfProject/
中,从而使整个NameOfProject/
变得模糊。您需要重写整个NameOfProject/MyCode/
存储库中的目录名。看起来是解决方案。我很快就会试试的。我现在还不知道这个过滤命令。谢谢分享。它确实值得知道,并将尝试此解决方案,然后返回。git filter branch
很难使用,--tree filter
相当慢(它为它处理的每个提交提取所有文件,然后从新树创建一个新的提交),但它是一个非常强大的命令。@phd它可以工作。在您的解决方案之后,我在refs/original/refs/remotes
方面遇到了一些困难,但总的来说它是有效的。非常感谢。