github:“;链接“;对一个组织的私人回购

github:“;链接“;对一个组织的私人回购,git,github,collaboration,Git,Github,Collaboration,我有一个github私有存储库,我一直在其中与其他几个(私有)合作者合作。我们称之为回购协议 一位客户刚刚将我添加到他们的组织帐户中。我需要基本上与该组织中的其他开发人员共享我的repo-a。我不确定“分享”这个词在这里是否合适;也许我需要“复制”?我该怎么做呢 我希望有人能帮助解决的更重要的问题是,我不希望组织看到我的私人合作者所犯下的历史。但是,希望我能够轻松地将repo-a中的最新代码“推送”到组织中(我仍计划与repo-a合作者私下合作)。这是否合理可行 我希望有人能帮助解决的更重要的问

我有一个github私有存储库,我一直在其中与其他几个(私有)合作者合作。我们称之为回购协议

一位客户刚刚将我添加到他们的组织帐户中。我需要基本上与该组织中的其他开发人员共享我的repo-a。我不确定“分享”这个词在这里是否合适;也许我需要“复制”?我该怎么做呢

我希望有人能帮助解决的更重要的问题是,我不希望组织看到我的私人合作者所犯下的历史。但是,希望我能够轻松地将repo-a中的最新代码“推送”到组织中(我仍计划与repo-a合作者私下合作)。这是否合理可行

我希望有人能帮助解决的更重要的问题是,我不希望组织看到我的私人合作者所犯下的历史

Git存储库附带了它的所有历史记录。每一次。您可以通过从存储库中删除
.git/
文件夹,然后再次运行
git init
来“导出”存储库的当前状态。这将重置您的历史记录,尽管此时它将是一个完全不同的存储库

假设您这样做了,那么您就可以将这个新存储库推送到该组织帐户上的一个repo,并从旧存储库的快照开始

希望我没弄错你的问题

我希望有人能帮助解决的更重要的问题是,我不希望组织看到我的私人合作者所犯下的历史

Git存储库附带了它的所有历史记录。每一次。您可以通过从存储库中删除
.git/
文件夹,然后再次运行
git init
来“导出”存储库的当前状态。这将重置您的历史记录,尽管此时它将是一个完全不同的存储库

假设您这样做了,那么您就可以将这个新存储库推送到该组织帐户上的一个repo,并从旧存储库的快照开始


希望我正确理解你的问题。

简短回答:不,这是不可能的。

你在这里自找麻烦。如果您提供给他们的历史记录不包含实际的历史记录,那么根据定义,您没有提交其版本所包含内容的记录。不管怎样,您将永远无法从包含“private”提交的分支推送到不包含“private”提交的分支。你基本上要求有这样的历史:

- W - X - ABCD - Y - Z - EFGH - ... (public)
       \              \
        A - B - C - D - x - E - F - G - H (private)
- W - X - ABCD ------------------ Y - Z - EFGH - ...
   \                               \
    A - B - C - D (abandoned)       E - F - G - H (abandoned)
其中,ABCD是一个包含提交a、B、C和D更改的提交,类似地,EFGH隐藏了E、F、G和H。您可以使用git checkout公共分支执行此操作;git合并--挤压私有分支。挤压合并执行合并,然后将其记录为常规提交,即不将合并分支作为父级。这个选项可能适合您,只要您非常小心地进行合并。尽管如此,这仍然是一种痛苦。(请注意,合并Y和Z会导致私人回购中的重复提交,ABCD与A-B-C-D。这很难看,但比完全不同历史的替代方案要好。)

因此,不管怎样,你们的历史将会发生分歧。最好的情况可能是使用标签帮助自己跟踪事物。例如,您可以将commit
D
标记为
private-0001
,commit
ABCD
标记为
public-0001
,commit
H
标记为
private-0002
和commit
EFGH
标记为
public-0002
。这至少会让你有一些关于不同历史是如何联系在一起的记录您永远不能将任何私有提交合并到公共分支中,因为提交会带来它们的祖先。

所以我建议你另找一条路。根据您希望这些捐款保密的原因,有几种选择:

  • 放弃你的计划,把私人贡献者公之于众

  • 让私人贡献者以您的名义提交,或使用假名。(让他们在这个存储库的.gitconfig中设置
    user.name
    user.email
    )。如果你只是想让他们保持匿名,这就足够了,而且不会带来痛苦

  • 半途而废。回顾第一个图表,在您进行挤压合并之后,将所有私有参与者重置为该点(对他们可能拥有的任何其他分支进行重定)。每次公开发布时,基本上都会丢弃私有提交,并将压缩合并提交视为新的事实。这需要你保持警惕,确保其他投稿人按要求行事,但这会让你摆脱那些疯狂历史的包袱。(如果有人未能重置,它是可以修复的。假设他们在commit
    D
    的基础上进行commit
    E
    而不是commit
    ABCD
    。他们可以使用git-rebase--on commit-about commit-D将其分支移植到它所属的位置。)

    - W - X - ABCD - Y - Z - EFGH - ... (public)
           \              \
            A - B - C - D - x - E - F - G - H (private)
    
    - W - X - ABCD ------------------ Y - Z - EFGH - ...
       \                               \
        A - B - C - D (abandoned)       E - F - G - H (abandoned)
    
    这样做的好处是,您从未经历过跨越大量历史的任何可怕的合并,也不会以无关合并或重复提交的形式拖累任何行李。如果你很少公开发表私人捐款,那就不会那么痛苦了。如果你小心的话,你甚至可以让事情变得有点异步,例如:

    - W - X - AB - X - CD - Z - ...
          |\
          | A - B (abandoned)
           \
            C - D (abandoned)
    
    只是要非常非常小心地跟踪你所做的工作。除了我前面讨论过的标记之外,您还可以让挤压合并提交包括合并提交中的短SHA1和提交主题列表


  • 简短回答:不,这不太可能。

    你在这里自找麻烦。如果你给他们的历史是真的