我正在开发一个目前具有以下目录布局的R项目:
proj1 |-- file.r
file.r
用于构建特定于项目1的统计模型(因此proj1
)。
在开发过程中,我们将为众多项目构建众多模型:
Work |-- proj1 | └-- file.r |-- proj2 | └-- file.r : └-- projn └-- file.r
file.r
每个项目之间的相似度为90%,但会有差异。我的问题是,有没有办法创建一个主file.r
文件并简单地为每个项目分叉?这样,对主服务器的错误修正/增强可以简单地重新定位到forks,特定于文件的更改将简单地应用于顶部。我的第一个想法是使用子模块,但我不确定如何在这里应用它。谢谢!
答案 0 :(得分:3)
为每个项目使用“主题分支”:
git checkout master
git add file.r ;# this is your master template upon which others are based
git commit -m "Committed the master file"
然后为每个项目:
git checkout -B <project> master ;# create and checkout <project> branch
<hack away on file.r, commit when you want>
git push origin <project> ;# to share <project> with others
因此,在实践中,您最终会使用master
,例如project1
,project2
,project3
等等。应该完全按照自己的意愿行事,并保持理智。
此解决方案优于其他鼓励多个存储库的优势:
file.r
与git diff projectA projectB -- file.r
之间看到文件中的差异。您可以对多个存储库执行相同的操作,但它需要像git diff projectA/master projectB/master -- file.r
这样的存储库规范。如果您有20-30个项目存储库或使用子模块,可能会感到困惑。git fetch origin
并观察输出一样简单。git remote add <project>
存储库,直到你得到它们为止。缺点(不完整的清单):
file.r
可能并不那么明显。这可能是一个交易破坏者。我不知道。我想这取决于你的工作流程。R
项目,这可能不太重要。答案 1 :(得分:3)
IMO实现这一目标的最佳方式是:
git submodule
将共享代码集成到每个项目答案 2 :(得分:0)
其他答案中也描述了一些方法。
例如,
最后,当没有其他方法时,我在文件头中使用注释,它是另一个文件的分支。
Date | Author | Description
------------- | ------------------- | --------------
05/18/2018 | You | Forked from Other/file.r