确保每次都有新鲜的git子树可用

问题描述

我有一个仓库A,我想使用git subtree在其中添加一个新仓库B

在仓库A中,我可以运行以下命令

git subtree add --prefix=.github/workflows <my-repo>.git master --squash

,新的仓库被克隆到.github/workflows文件夹中

现在,我使用.github/workflowssed上运行一些查找和替换命令。 因此,重要的是要重新使用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来更改先前添加子树的提交并更新该先前的提交。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...