4

假设我有两个 repos,repo Arepo B,其中包含一个文件夹,其中的代码类似于 repo A 中的代码(实际上这并不重要,但是好的,假设我刚刚从一个)。

现在我想要以下内容:

  • 像我在回购 A 中习惯的那样工作
  • 设置和附加远程 repo 指向 repo B,但只推拉这个子文件夹。
  • 推送,当它需要这个 repo B.

所以,基本上,我正在寻找最便宜的方式来进行反向稀疏检查。

4

4 回答 4

2

这似乎正是 git-subtree 1试图解决的问题。

cd repoB
git subtree pull -P folder {repoA URL} {repoA branch}
... edit test commit... 
git subtree push -P folder {repoA URL} {repoA branch}
于 2013-09-04T15:03:13.457 回答
2

一种方法是设置包含两个项目通用代码的第三个存储库,然后将该存储库用作存储库 A 和 B 中的子模块。

但是,如果我正确理解您的问题,那么整个 A 存储库就是那个“通用”代码。在这种情况下,第三个存储库中不需要,您可以简单地将 A 添加为 B 中的子模块。

于 2013-09-04T14:57:21.477 回答
2

您可以添加 ref 并在 repo 中发布任何内容。因此,要维护一个单独的分支来跟踪主分支的子文件夹,请将其添加到您的提交仪式中:

# in your commit ritual (no need to be mainbranch-specific, 
# this will detect changes and add the tracking commits only as necessary),
if [ `git rev-parse mainbranch:path/to/subfolder` \
      != `git rev-parse subfolderbranch:path/to/subfolder` ]; then 
    git commit-tree -p subfolderbranch -p mainbranch \
              mainbranch:path/to/subfolder <<<"tracking mainbranch subfolder" \
    | xargs git update-ref -m"tracking mainbranch subfolder" refs/heads/subfolderbranch 
fi
于 2013-09-04T18:40:36.577 回答
1

克隆 repoA 以创建新的 repoB。然后,为除子文件夹之外的所有内容设置假设不变位:

git update-index --assume-unchanged *
git update-index --no-assume-unchanged <subdirectory>

注意:文件/目录参数不能以 a.或 a开头/

之后,您可以删除除子文件夹之外的所有内容。由于假设不变的位 git 不会注意到这一点。现在工作,这将是一个正常的存储库。您可以将更改的文件从旧的 repoB 复制到这个。

请注意,推送和拉取可能会再次创建不在子文件夹中的文件。为了防止这种情况,您可以创建一个挂钩来删除除子目录之外的所有内容。

于 2013-09-10T12:07:22.457 回答