[英]Git. Change repository root folder
我的项目位于文件夹C:/projects/NameOfProject/MyCode/
, .git
位于文件夹MyCode/
,因此只有MyCode的内容位于存储库中。
最近,我补充说,在该文件夹的一些其他文件OtherFiles/
关系到文件夹中的项目NameOfProject/
。 我不能移动这些到MyCode/
由于文件之间的关系MyCode/
和OtherFiles/
。 现在,我需要以某种方式更改存储库设置,文件夹MyCode/
和OtherFiles/
将位于存储库的根目录。 此外,非常需要继续提交历史记录:更改存储库根目录后的下一次提交将保留当前分支的历史记录。
总结一下以上内容:我在C:/projects/NameOfProject/MyCode/
并且我想将存储库根目录移到C:/projects/NameOfProject/
而不要在这两个文件夹中都移动文件/子文件夹。
我该如何实现?
您需要使用git filter-branch
在整个NameOfProject/MyCode/
存储库中重写目录名称。 我这样推荐:
MyCode
复制到一个临时位置。 git filter-branch --tree-filter 'mkdir MyCode && mv * MyCode || :' -- --all
git filter-branch --tree-filter 'mkdir MyCode && mv * MyCode || :' -- --all
。 过滤器将重写所有分支; 对于每个现有的提交,它将创建一个新的子目录MyCode
并将所有文件移入其中(忽略错误;将至少存在一个错误-无法将MyCode
转换为MyCode
)。 这是整个过程的主要部分; 它准备使存储库期望MyCode
子目录中的所有文件而不是存储库的根目录,但保留提交历史记录。 .git
目录移动到C:/projects/NameOfProject/
(而不是MyCode
!)并清理temp dir。 MyCode/.git
。 git add OtherFiles
git commit -m OtherFiles
您可以在C:/ projects / NameOfProject /下通过以下方式初始化一个新的仓库
git初始化
并将远程分支拉到该仓库下,只需将MyCode和OtherFiles这两个文件夹复制并替换到初始化的git repo中,然后将其推送到您的远程仓库即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.