8

我有一个非常困难的情况:在一个项目(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)中?

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

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

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

4

4 回答 4

2

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

于 2013-10-07T07:33:23.463 回答
1

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

我不是 git 专家,但他们中的一些人告诉我,实际上不可能只使用存储库的一部分——因为 git 是如何工作的,很多历史和更改都存储为“增量”(所以只有从一个版本更改为另一个版本的文件部分存储在较新的版本中......或类似的东西)。

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

于 2013-12-12T17:37:33.803 回答
1

我担心您不能只在您的存储库中包含另一个存储库的一部分。为了解决这个问题,我有一个小脚本,可以将我需要的文件的最新版本检出到当前工作目录中。如果您使用“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'
于 2019-06-25T09:13:40.253 回答
0

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

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

cp path/to/git-repo-1/lib/foo path/to/git-repo-2/lib/
git add .
git commit -a -m 'updated lib/foo'
于 2013-09-20T12:20:15.890 回答