Git:将单个文件从一个存储库镜像到另一个存储库
假设我在存储库a中有两个存储库和一个参数文件。存储库B需要相同的文件,如果存储库a中有此文件的更新,则应使用存储库B中的git pull进行更新。另一种方式(从B到A)是不需要的 有没有一种简单的方法可以将一个文件从存储库镜像到另一个存储库并使其保持最新? 解决方案还可以利用CI管道 有什么办法面对这个问题吗 有没有一种简单的方法可以将一个文件从存储库镜像到另一个存储库并使其保持最新 在旁观者眼里,简单也许是最简单的。我怀疑对于你的情况,答案是否定的,但也许你会认为下面的问题很简单 这里要记住的关键一点是Git不存储文件。Git存储提交。提交然后存储文件,但这是一个包交易:每个提交都有每个文件的完整快照。您要么有一个提交,因此所有的文件,要么没有提交,因此没有任何文件 这意味着,如果要处理单个文件,而不是整个文件集合,则可以有多种选择:Git:将单个文件从一个存储库镜像到另一个存储库,git,continuous-integration,repository,mirror,Git,Continuous Integration,Repository,Mirror,假设我在存储库a中有两个存储库和一个参数文件。存储库B需要相同的文件,如果存储库a中有此文件的更新,则应使用存储库B中的git pull进行更新。另一种方式(从B到A)是不需要的 有没有一种简单的方法可以将一个文件从存储库镜像到另一个存储库并使其保持最新? 解决方案还可以利用CI管道 有什么办法面对这个问题吗 有没有一种简单的方法可以将一个文件从存储库镜像到另一个存储库并使其保持最新 在旁观者眼里,简单也许是最简单的。我怀疑对于你的情况,答案是否定的,但也许你会认为下面的问题很简单 这里要记住的
- 在存储库A和B中使用不同的提交。A中的提交有很多文件,包括此参数文件。B中的提交有很多文件,包括这个参数文件
这为您提供了B中的两个子选项:
- B拥有A拥有的所有提交,加上只有B烦恼的特定于B的提交,只要A中有新的提交,你就得到它(整个提交),然后在B中构建一个新的特定于B的提交,它接受最近的特定于B的提交,并将这一个文件换成一个新文件,然后提交结果
- 或者,B没有来自A的所有提交。相反,当A中有此文件的更新时,您有一些软件(1)会注意到;然后(2)通过提取一些现有的特定于B的提交、更新文件并进行新的特定于B的提交来生成新的特定于B的提交
- 这种“第三存储库”方法有一个混合变体。这种混合变体的缺点是,它使生成和提交新参数文件变得更加困难,而且简单的
在两个存储库a和B中都不起作用:相反,您需要一个特殊的“签出然后更新”序列。(但CI系统往往非常擅长做这样的特殊工作。) 这里,不是将参数文件作为常规的“所有文件,包括参数文件”提交,而是将参数文件提交为仅包含一个参数文件的提交。到目前为止,这与拥有第三个C存储库完全相同 但是,这是一个混合的存储库,它不是第三个存储库,而是在存储库a和B中的“孤立分支”上有这个文件。也就是说,它不是:git签出
您将运行:git checkout main # now you have all files including the parameter file
现在可以更新文件并提交。然后返回主分支(或任何其他分支),这里没有参数文件,因此现在从rm paramfile # it's untracked: now it's gone git checkout paramfile-branch # now you have only one file: the parameter file, paramfile
:paramfile分支提取参数文件
此分支中的git show paramfile-branch:paramfile > paramfile # or similar
文件将.gitignore
列为已忽略(在paramfile
paramfile分支的提交中根本没有
文件:这是一个跟踪文件,也是唯一的文件),因此就Git而言,这只是一个临时文件 由于文件仅在repo A中更新,repo B可以从repo A的.gitignore
获取,将生成的哈希ID写入repo B的paramfile分支
名称:paramfile分支
从该分支获取新提交git fetch repo-A +paramfile-branch:paramfile-branch
paramfile branch
)保存“repo C”中最后一次提交的哈希ID(嵌入到a和B中)