我有客户端项目,客户端允许我访问Git仓库(官方),我和我的团队伙伴(2~3人)在不同服务器的重复仓库中进行项目。我能够在两个repos之间同步,但是当将非官方回购的提交同步到官方repo git时,保留了贡献者的名字。除了我,我不希望我的客户知道提交中的任何其他名称。
现在,我要求我的队友在他们各自的分支中,手动将他们的更改粘贴到我的分支并提交,所以提交以我的名字命名。我知道这是使用版本控制的非常不明智的方式,所以寻找简化流程的建议,这样我就可以使用标准的git命令来实现我所需要的。
答案 0 :(得分:1)
当你获得(git fetch)你的协作者提交时,你可以
git filter-branch
更改所述提交的作者
请参阅“git - could I change my name and surname in all previous commits?”命令:
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 "$@"'
但这意味着您不得在该回购中进行任何修改,因为过滤器分支会更改其历史记录 您将仅使用该repo将这些修改后的提交推送到客户端 在内部,您使用的是通常的回购,与您的队友同步,每次提交时都会设置真实姓名。
同样,这个解决方案是关于两个不同的回购:
filter-branch
)。答案 1 :(得分:1)
所以VonC的答案很好,我也相应地对它进行了投票,但如果你对另一种方法感兴趣,可以采用一种方法来解决它。这有点hacky,但hacky问题需要hacky解决方案。
让每个开发人员将您的姓名/电子邮件放在他们的.gitconfig
中,这样您就始终是每次提交的官方作者。然后,让每个开发人员将以下脚本放在他们的.git/hooks/post-commit
文件中:
#!/bin/sh
git tag joe@blow.com/`git rev-parse --short head`
当然,他们希望用自己的电子邮件地址替换“joe@blow.com”。当他们推送到您的共享仓库时,他们应该将--tags
传递给git push
,但是当您推送客户的官方仓库时,请不要推送标签。
现在,当您查看共享仓库的历史记录时,您将看到谁通过标记名称提交了什么。大多数客户端(如Source Tree)清楚地显示与每个提交相关联的标记,git log --decorate
等也是如此。