【问题标题】:Git: include part of a project into another projectGit:将项目的一部分包含到另一个项目中
【发布时间】:2013-09-20 09:05:10
【问题描述】:

我有一个非常困难的情况:在一个项目(git repo)中我有一个文件,我在另一个项目(另一个 git repo)中需要它。是否有任何清晰且(尽可能)简单的方法将其放入我的项目中? 它看起来像:

git-repo-1:
    lib/foo
    lib/ololo

git-repo-2:
    lib/*foo* (from repo-1)
    lib/bar
    lib/baz 

我的问题是:1. 我该怎么做? 2. 如何将文件(包括来自 git-repo-1)更新到我的 repo (git-repo-2) 中?

附言是的,我看了很多关于子树的页面,但是……对我来说仍然不是很清楚。有什么建议么?甚至指导 ;-) 我会很感激任何事情。

UPD:我想要什么:http://git-scm.com/book/en/Git-Tools-Subtree-Merging 但是!我只想将“机架”存储库的一部分放入我的项目存储库中。

问题是:如何将我需要的文件从一个 repo 中拆分出来并合并到另一个?

【问题讨论】:

  • 试试submodules?
  • 我不明白怎么做。你能帮帮我吗?
  • 只要使用file:///path/to/your/git-repo-1 作为远程URL,就可以了。一点谷歌搜索也可能会有所帮助;)
  • 谢谢,但这并不完全是我想要的:将一个 repo 部分包含到另一个 repo 中,或者将一个 repo 的一部分包含到另一个 repo 中。

标签: git git-subtree


【解决方案1】:

将 lib/foo 提取到一个名为 common 的新项目中。
然后在项目 1 和 2 中包含完整的公共项目

【讨论】:

  • 这是正确的做法,因为它可以最大限度地减少依赖管理开销。
【解决方案2】:

我认为您在这里有两个不同的问题。第一个是如何将一个 repo 包含在另一个 repo 中(模块或子树功能用于)。二是如何只使用git repo的一部分。

我不是 git 专家,但他们中的一些人告诉我,实际上不可能只使用存储库的一部分——因为 git 的工作方式,其中许多历史记录和更改存储为“ deltas”(因此只有从一个版本更改为另一个版本的文件部分存储在较新的版本中......或类似的东西)。

所以...我认为您最好的选择是将项目 2 放在一个完全独立的目录中,然后将您需要的文件从那里复制到项目 1 中。(或设置某种符号链接/别名这样你就不必复制它们了)。

【讨论】:

    【解决方案3】:

    我担心您不能只在您的存储库中包含另一个存储库的一部分。 为了解决这个问题,我有一个小脚本,可以将我需要的文件的最新版本检出到当前工作目录中。 如果您使用“git archive”,您可以从上游检索最新版本:

    例如:

    git archive --format=tar --remote ssh://git@gitserver:7999/infra/scripts.git HEAD supplier.csv | tar xf -
    
    
    git add ./supplier.csv ;
    
    
    git commit -m 'Update suppliers from upstream'
    

    【讨论】:

      【解决方案4】:

      我不建议深入 git。在我看来,你的项目必须尽可能的清晰。

      您可以手动或使用脚本完成您需要的工作:

      cp path/to/git-repo-1/lib/foo path/to/git-repo-2/lib/
      git add .
      git commit -a -m 'updated lib/foo'
      

      【讨论】:

      • 很遗憾这是不可能的。
      猜你喜欢
      • 1970-01-01
      • 2012-03-11
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多