2

我正在开发一个 R 项目,该项目目前具有以下目录布局:

项目1
  |-- 文件.r

file.r用于构建特定于项目 1 的统计模型(因此proj1)。

在开发过程中,我们将为众多项目构建大量模型:

工作
  |-- 项目1
  | └-- 文件.r
  |-- 项目2
  | └-- 文件.r
  :
  └-- 项目
        └-- 文件.r

file.r每个项目之间将有 90% 相似,但会有差异。我的问题是,有没有办法创建一个主file.r文件并为每个项目简单地分叉它?这样,对 master 的错误修复/增强可以简单地重新定位到 fork,并且文件特定的更改将简单地应用于顶部。我的第一个想法是使用子模块,但我不确定如何在这里应用它。谢谢!

4

3 回答 3

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等等都是基于它的。应该完全按照您的意愿行事,并保持一切正常。project2project3

与其他鼓励多个存储库的解决方案相比,此解决方案的优势:

  1. 更容易管理。您只有一个存储库,实际上最多有 20-30 个分支?听起来很多,但通过清晰的标签很容易知道你在哪里,特别是如果你只管理一个小文件集。
  2. 如果你很懒(就像我一样),那么容易区分。file.r您可以看到两个项目之间的文件差异git diff projectA projectB -- file.r。您可以对多个存储库执行相同的操作,但它需要一个存储库规范,例如git diff projectA/master projectB/master -- file.r. 如果您有 20-30 个项目存储库或使用子模块,可能会感到困惑。
  3. 轻松更新。获取更新就像发布git fetch origin和观察输出一样简单。
  4. 轻松克隆。设置新的本地存储库时,您克隆了一个远程。无需克隆原点,然后再克隆git remote add <project>存储库,直到您拥有它们为止。

缺点(不完整的列表):

  1. 此方法依赖于您密切关注已签出的分支。有关目录结构的任何内容都不会提示您,因此file.r在任何给定时刻您正在查看的内容可能都不那么明显。这可能会破坏交易。我不知道。我想这取决于您的工作流程。
  2. 正如 KurzedMetal 在评论中指出的那样,如果您需要将所有项目合并为一个,这可能会很快变得一团糟。因此,我不建议将它用于源代码。然而,对于不同的R项目,这可能不是一个问题。
于 2012-07-06T16:58:04.960 回答
3

IMO 实现这一目标的最佳方法是:

  1. 创建共享代码的库和存储库
  2. 为每个项目创建一个 repo
  3. 用于git submodule将共享代码集成到每个项目中
  4. 导入 r 库并添加项目特定代码。
于 2012-07-06T17:00:44.660 回答
0

There are ways described in the other answers.

For example,

  • use object-oriented-patterns or templates to increase reuse and reduce code.
  • use git branch
  • use git submodule
  • Finally, when no other way, I use comments in the file header, that it is a fork of another file.

     Date          | Author              | Description
     ------------- | ------------------- | --------------
     05/18/2018    | You                 | Forked from Other/file.r
    
于 2018-07-07T14:41:06.980 回答