在提交主服务器上,更新多个存储库中的代码

时间:2017-12-13 05:15:15

标签: git gitlab

在将我的主分支提交到我的Git存储库时,我需要将该最新代码更新到多个其他存储库。
我怎么能这样做?

git commit -u origin master 

例如:如果我有存储库1,2和3 如果我只将我的代码推送到存储库1中的master分支,则应该在repository2和3的master分支中自动更新代码。

3 个答案:

答案 0 :(得分:1)

别忘了你可以push to multiple repos in one step

git remote add all git://original/repo.git
git remote set-url --add --push all git://another/repo.git
git remote set-url --add --push all git://original/repo.git

git push all master

纯粹的提交后推送解决方案将是" How to automatically push after committing in git?" 例如,来自the onei4h

#!/usr/bin/env bash

branch_name=`git symbolic-ref --short HEAD` 
retcode=$?
non_push_suffix="_local"

# Only push if branch_name was found (my be empty if in detached head state)
if [ $retcode = 0 ] ; then
    #Only push if branch_name does not end with the non-push suffix
    if [[ $branch_name != *$non_push_suffix ]] ; then
        echo
        echo "**** Pushing current branch $branch_name to origin [i4h_mobiles post-commit hook]"
        echo
        git push origin $branch_name;
    fi
fi

它将推送除名为xxx_local的分支之外的任何分支(为了避免在准备好推送所述提交之前完成多个中间提交时推送这些分支)。

答案 1 :(得分:0)

正确执行步骤:

如果您想在一个存储库中推送代码:

Step1 :git add -A(这会将所有文件添加到git中)

Step2 :git commit -m“First commit”

Step3 :git remote add origin (第一个回复网址)

Step4 :git push -u origin master

如果要将代码推送到多个存储库

按照以上两个步骤

然后

第3步:git remote add alt (第二个远程网址)

第4步:git push alt master

答案 2 :(得分:0)

您可以使用git hook来执行此操作。

首先,找到你的钩子文件夹:

git config --list
#...
#core.hookspath=~/shared-git-hooks

或使用以下命令设置它:

git config core.hookspath ~/shared-git-hooks

创建包含脚本的钩子文件

touch ~/shared-git-hooks/post-commit

#post-commit file
git push ...

设置后,一旦提交,将在提交后运行脚本。

您可以在此处查看git hook的更多详细信息: https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks

希望它可以提供帮助。

脚本可能如下所示:

#This script will push master to all existing remote
#git remote add repo2 https://github.com/repo2.git
#git remote add repo3 https://github.com/repo3.git
for remote in $(git remote); do git push $remote master; done;

另请注意,如果您想在推送时触发它,则需要使用pre-push挂钩代替post-commit

还有一件事,如果您只想在特定项目/存储库上执行此操作,则可能需要先检查项目位置。

if [ "$(pwd)" == "/your/project/path" ]; then
    for remote in $(git remote); do git push $remote master; done;
fi