0

我有一个棘手的 Git 情况。我有一个单一的 Git 存储库,我现在需要与另一个组织共享,并允许他们修改并将更改提交给我(并随时更新我所做的未来更改)。但是,存储库中有许多文件包含我在法律上不能披露的专有信息。我无法从存储库中完全删除这些文件,因为它们对我目前正在处理的事情至关重要。

理想情况下,我会将专有文件移动到单独的存储库/库中,但这将是一个较小的重构项目,如果可以的话,我想避免它。目前,专有和非专有文件都混合在同一个目录结构中。

我的目标如下

  1. 为他们提供一个没有任何专有文件的存储库。我不在乎他们是否无法访问修订历史记录,它可以是一个“新鲜”的副本,只需一次提交。

  2. 允许他们向我提交新的提交以更新我的存储库。

  3. (理想情况下)允许他们接受我的新提交,仅包含对非专有文件所做的更改。

有什么方法可以在 Git 中做到这一点,同时仍然允许我拥有一个包含专有和非专有组件的存储库?

4

2 回答 2

0

这听起来像是 Git 子模块的工作。一种解决方法是

  • clone你自己的回购
  • cd到父回购,git submodule add <child repo>
  • 子仓库将用于私有文件,git rm其他文件以避免与父仓库重复

现在在父存储库中,您将需要git filter-branch删除所有私有文件。这是一个有争议的步骤,因为它将一直重写历史记录到私有文件的第一次提交。

最后,您可以维护两个存储库,并无需担心共享父存储库。

于 2013-05-14T01:18:23.567 回答
0

(这是对早期答案的完全重写)

git checkout -b sanitized master
# do your sanitization work
git commit
git tag sanitization-prep
git checkout --orphan distributable
git commit
git checkout sanitized
git merge -s ours distributable
git tag distributable-base
git checkout master
git merge -s ours sanitized

-s ours合并将您所做的所有更改标记为已合并到 master 中,而没有实际应用它们中的任何一个。由于可分发的提交没有父项,因此当您将该分支推送到他们将在其中工作的 DMZ 存储库时,只会发送其他内容。

何时从可分发分支中提取更改

git checkout sanitized
git merge distributable
git checkout master
git merge sanitized

有一个警告:你必须在merge -s ours distributable-base你将要合并到的每个分支中都做到这一点。除此之外,你的工作非常普通。

我在出站合并程序中获得了公平的途径。到目前为止,我所拥有的那个是可怕的。

于 2013-05-14T05:03:41.683 回答