git 推送提交影响到一个给定的路径到一个新的来源?

rqqzpn5f  于 2022-12-21  发布在  Git
关注(0)|答案(1)|浏览(136)

我目前有一个文件结构,看起来像这样:

# C:\Repositories\VisualStudio\MyProject
.git # repository is one level above clientapp and includes other folders/paths than clientapp
afolder
clientapp
file1
file2

现在我想把clientapp文件夹移到一个新的位置,并将其重命名为frontend。然后我想只为frontend创建一个新的存储库。

# inside C:\Repositories\MyProject\frontend (no more VisualStudio in the path!)
.git
<all the frontend folders and files>

现在问题来了:当然,我现在丢失了原始clientapp的历史记录(现在:frontend)文件夹,因为我创建了一个新仓库。有什么方法可以把关于原始clientapp文件夹的提交复制到我为frontend创建的新仓库中吗?

7kqas0il

7kqas0il1#

TLDR:将原始存储库过滤到想要保留的文件夹中,然后从新存储库中提取它。

1.下载并使用git filter-branch官方推荐的git-filter-repo

1.将存储库筛选到相关文件(确保之前有备份!):

git filter-repo --path clientapp

1.将clientapp内的文件移动到根目录

git filter-repo --subdirectory-filter clientapp/

1.转到新存储库,将远程存储库添加到原始存储库:

git remote add repo-A <path to original repo, e.g. ../repo-A>

1.将文件和历史记录从该分支提取到存储库B(仅包含要移动的目录)。

git pull repo-A master

1.删除到存储库A的远程连接。

git remote rm repo-A

1.从新存储库推送

git push

1.删除原始存储库的副本(只包含过滤后的文件夹)。如果需要,可以再次克隆它。愉快地使用具有完整提交历史记录的新存储库。

进一步阅读:关于如何move files from one repository to another, preserving git history的中等文章,特别是关于 * 将文件合并到新的存储库B* 的部分。

相关问题