同步官方和非官方Git回购,隐藏非官方回购参与者-需要工作流

同步官方和非官方Git回购,隐藏非官方回购参与者-需要工作流,git,git-flow,Git,Git Flow,我有一个客户端项目,客户端给了我Git repo(官方)的访问权限,我和我的团队成员(2~3人)在不同服务器上进行重复的repo。我可以在两个回购协议之间同步,但在将非官方回购协议的提交同步到官方回购协议时,git会保留参与者名称。我不想让我的客户知道除了我以外的任何其他名字 现在,我要求我的团队成员在各自的分支中手动复制并粘贴他们的更改到我的分支中,然后提交,以便提交时使用我的名字。我知道这是一种非常不懂版本控制的方法,所以我想寻求一些建议来简化我的流程,这样我就可以使用标准的git命令来实现

我有一个客户端项目,客户端给了我Git repo(官方)的访问权限,我和我的团队成员(2~3人)在不同服务器上进行重复的repo。我可以在两个回购协议之间同步,但在将非官方回购协议的提交同步到官方回购协议时,git会保留参与者名称。我不想让我的客户知道除了我以外的任何其他名字

现在,我要求我的团队成员在各自的分支中手动复制并粘贴他们的更改到我的分支中,然后提交,以便提交时使用我的名字。我知道这是一种非常不懂版本控制的方法,所以我想寻求一些建议来简化我的流程,这样我就可以使用标准的git命令来实现我所需要的功能。

当你得到(git fetch)你的合作者提交的文件时,你可以

  • 使用git cherry pick将它们导入专用于推送到客户机的特殊回购协议中
  • 使用
    git filter branch
    更改所述提交的作者。
    见“
命令:

git filter-branch --commit-filter \
'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \
export GIT_AUTHOR_NAME="Author Name";\
export GIT_AUTHOR_EMAIL=authorEmail@example.com;\
export GIT_COMMITTER_NAME="Commmiter Name";\
export GIT_COMMITTER_EMAIL=commiterEmail@example.com;\
fi;\
git commit-tree "$@"'
但这意味着您不得在该回购中进行任何修改,因为过滤分支会更改其历史记录。
您将仅使用该回购将修改后的提交推送到客户端。
在内部,您使用的是通常的回购协议,与您的队友同步,每次提交时都会设置真实姓名

同样,该解决方案涉及两种不同的回购协议:

  • 与团队共享的一个(那里没有过滤器分支,git推/拉和往常一样,使用本地作者名)
  • 一个用于客户端,在推送到客户端之前由(
    过滤器分支
    )馈送并重写
当您获取(git fetch)您的合作者提交的内容时,您可以

  • 使用git cherry pick将它们导入专用于推送到客户机的特殊回购协议中
  • 使用
    git filter branch
    更改所述提交的作者。
    见“
命令:

git filter-branch --commit-filter \
'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \
export GIT_AUTHOR_NAME="Author Name";\
export GIT_AUTHOR_EMAIL=authorEmail@example.com;\
export GIT_COMMITTER_NAME="Commmiter Name";\
export GIT_COMMITTER_EMAIL=commiterEmail@example.com;\
fi;\
git commit-tree "$@"'
但这意味着您不得在该回购中进行任何修改,因为过滤分支会更改其历史记录。
您将仅使用该回购将修改后的提交推送到客户端。
在内部,您使用的是通常的回购协议,与您的队友同步,每次提交时都会设置真实姓名

同样,该解决方案涉及两种不同的回购协议:

  • 与团队共享的一个(那里没有过滤器分支,git推/拉和往常一样,使用本地作者名)
  • 一个用于客户端,在推送到客户端之前由(
    过滤器分支
    )馈送并重写

    • 所以VonC的答案是好的,我也相应地提高了投票率,但如果你对另一种方法感兴趣,这里有一种方法。这有点老套,但老套的问题需要老套的解决方案

      让每个开发人员在他们的
      .gitconfig
      中输入您的姓名/电子邮件,以便您始终是每个提交的正式作者。然后,让每个开发人员将以下脚本放入他们的
      .git/hooks/post commit
      文件中:

      #!/bin/sh
      git tag joe@blow.com/`git rev-parse --short head`
      
      当然,他们会想取代“我的朋友”joe@blow.com“他们有自己的电子邮件地址。当他们推送到您的共享回购时,他们应该将
      --标签
      传递到
      git push
      ,但当您推送客户的正式回购时,不要推送标签


      现在,当您查看共享回购的历史记录时,您将看到谁通过标记名提交了什么。大多数客户机(如Source Tree)清楚地显示了与每次提交相关的标记,git log--decoration等也是如此。

      所以VonC的答案是好的,我也相应地对它进行了升级,但是如果您对另一种方法感兴趣,这里有一种方法。这有点老套,但老套的问题需要老套的解决方案

      让每个开发人员在他们的
      .gitconfig
      中输入您的姓名/电子邮件,以便您始终是每个提交的正式作者。然后,让每个开发人员将以下脚本放入他们的
      .git/hooks/post commit
      文件中:

      #!/bin/sh
      git tag joe@blow.com/`git rev-parse --short head`
      
      当然,他们会想取代“我的朋友”joe@blow.com“他们有自己的电子邮件地址。当他们推送到您的共享回购时,他们应该将
      --标签
      传递到
      git push
      ,但当您推送客户的正式回购时,不要推送标签


      现在,当您查看共享回购的历史记录时,您将看到谁通过标记名提交了什么。大多数客户端(如Source Tree)清楚地显示了与每次提交相关的标记,正如
      git log--decoration
      ,等等。

      只要让他们用您的名字/email编辑本地的.gitconfig就可以了。我想要的是在非正式的repo中进行提交的真人,这样我就知道如果出现问题,该怪谁了。我只想在客户的回购协议中隐藏他们的名字。在官方分支上重新设置共享分支可能会起作用,只要让他们用你的名字/电子邮件编辑他们的local.gitconfig就行了。我想要在非官方回购协议中做出承诺的真实人,这样我就知道如果出现问题,该怪谁。我只想在客户的回购协议中隐藏他们的名字。在正式分支协议之上重新设置共享分支协议可能会导致提交历史记录被污染,并且无法再将对客户回购协议的更改同步到本地回购协议。@ZbynekVyskovsky-kvr000可以将对客户的更改同步到尽可能长的时间。@ZbynekVyskovsky-kvr000当您重新编写在特殊回购协议中导入的新提交,并将其推送给客户时,我认为@ZbynekVyskovsky-kvr000还希望将客户的进一步更改同步到其本地回购协议(实名回购协议)中。那么,,他只需挑选新客户提交到他们的本地回购。这样,提交历史记录就会被污染,并且不再能够将对客户回购的更改同步到本地回购。@ZbynekVyskovsky-kvr000只要您重写,就可以同步对客户的更改