问题描述
我有一个仓库A
,我想使用git subtree
在其中添加一个新仓库B
在仓库A
中,我可以运行以下命令
git subtree add --prefix=.github/workflows <my-repo>.git master --squash
,新的仓库被克隆到.github/workflows
文件夹中
现在,我使用.github/workflows
在sed
上运行一些查找和替换命令。
因此,重要的是要重新使用git subtree add
,以便存在需要替换的变量。
所以,我可以做这样的事情
rm -rf .github/workflows/*
git subtree add --prefix=.github/workflows <my-repo>.git master --squash
sed -i '' -e 's/MY_LABEL/mytag/g' .github/workflows/*.yml
这可以完成工作,但是每次我添加子树时都会不必要地创建提交。 但是,可以仅使用git命令(而不使用rm -rf)实现这一点
我计划在pre-commit
挂钩中使用它,以便它始终在用户提交之前运行。
正确的方法是什么?
解决方法
尽管可能需要解决冲突,但subtree pull
(可能与squash
一起使用)可以节省rm
命令。我也创建了提交,并创建了从<my-repo>.git
提取数据的历史记录。
我相信subtree
子命令会在您使用它来更新子目录时始终创建提交。以树结构Git stores文件,每个提交都指向该文件。因此,要更改其他文件,树和提交都将更改。
也就是说,如果您的存储库未共享,则可以使用history rewriting来更改先前添加子树的提交并更新该先前的提交。