programing

하나의 명령으로 모든 git remote에 푸시할 수 있습니까?

muds 2023. 6. 20. 21:54
반응형

하나의 명령으로 모든 git remote에 푸시할 수 있습니까?

수행하는 대신:

git push origin --all && git push nodester --all && git push duostack --all

명령 하나로 그렇게 할 수 있는 방법이 있습니까?

감사합니다 :)

다음을 작성합니다.all이름에 여러 개의 repo URL이 있는 원격:

git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git

그럼 그냥git push all --all.


다음과 같이 표시됩니다..git/config:

  [remote "all"]
  url = origin-host:path/proj.git
  url = nodester-host:path/proj.git
  url = duostack-host:path/proj.git

모든 분기를 모든 원격으로 푸시하는 방법

git remote | xargs -L1 git push --all

또는 특정 분기를 모든 원격에 푸시하려는 경우:

교체하다master당신이 밀고 싶은 나뭇가지로.

git remote | xargs -L1 -I R git push R master

(Bonus) 명령에 대한 Git 별칭을 만드는 방법

git config --global alias.pushall '!git remote | xargs -L1 git push --all'

입니다.git pushall이제 모든 분기를 모든 원격으로 푸시합니다.

항상 repo1, repo2 및 repo3로 푸시하지만 항상 repo1에서만 풀하려면 원격 '오리진'을 다음과 같이 설정합니다.

[remote "origin"]
    url = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo1
    pushurl = https://exampleuser@example.com/path/to/repo2
    pushurl = https://exampleuser@example.com/path/to/repo3
    fetch = +refs/heads/*:refs/remotes/origin/*

명령줄에서 구성:

$ git remote add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo1
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo2
$ git remote set-url --push --add origin https://exampleuser@example.com/path/to/repo3

만약 당신이 단지 끌어내고 싶다면.repo1하지만 할 수 있습니다.repo1그리고.repo2 특정 분기의 경우:

[remote "origin"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[remote "specialRemote"]
    url = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo1.git
    pushurl = ssh://git@aaa.xxx.com:7999/yyy/repo2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    ...
[branch "specialBranch"]
    remote = origin
    pushRemote = specialRemote
    ...

https://git-scm.com/docs/git-config#git-config-branchltnamegtremote 을 참조하십시오.

.git/config 파일을 편집하는 대신 다음 명령을 사용할 수 있습니다.

# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git

동일git push all --all여기서도 작동합니다.

1번 답과 동일한 결과를 얻었습니다.구성 파일을 원시적으로 편집하는 대신 명령줄을 사용하여 방금 작업을 수행했습니다.

나는 한 통화에 많은 원격으로 푸시하기 위해 짧은 bash 함수를 작성했습니다.단일 원격을 매개 변수로 지정하거나 여러 원격을 공백으로 구분하거나 지정하지 않고 모든 원격에 푸시할 수 있습니다.

.bashrc 또는 .bash_profile에 추가할 수 있습니다.

function GitPush {
  REMOTES=$@

  # If no remotes were passed in, push to all remotes.
  if [[ -z "$REMOTES" ]]; then
    REM=`git remote`

    # Break the remotes into an array
    REMOTES=$(echo $REM | tr " " "\n")
  fi

  # Iterate through the array, pushing to each remote
  for R in $REMOTES; do
    echo "Pushing to $R..."
    git push $R
  done
}

예:repo에 rem1, rem2 및 rem3의 세 가지 리모컨이 있다고 가정해 보겠습니다.

# Pushes to rem1
GitPush rem1

# Pushes to rem1 and rem2
GitPush rem1 rem2

# Pushes to rem1, rem2 and rem3
GitPush

특히 깃 후크를 사용할 수 있습니다.pre-push에 비슬립식 푸시 추가.git/hooks/pre-push.

의 기존 리포지토리가 이미 있는 경우origin기본 원격으로 사용되며 호출만으로 여러 원격 리포지토리에 푸시할 수 있습니다.git push(또는 IDE/텍스트 편집기의 git sync 버튼을 사용하여) 먼저 전류를 추가합니다.origin모든 작업에 사용되는 URL(예:push,pull,fetch푸시별 원격 오리진 URL:

git remote set-url --push --add origin "$(git remote get-url --push origin)"

그런 다음 다음과 같이 푸시별 URL에 서로 원격 저장소를 추가합니다.

git remote set-url --push --add origin "git@github.com:username/repo-name.git"

이제 모든 가져오기 및 꺼내기 작업은 원래 원격 리포지토리에서만 가져옵니다.

하지만 간단한 것으로.git pushGit는 추가한 모든 원격 리포지토리에 최신 변경사항을 푸시합니다.

언급URL : https://stackoverflow.com/questions/5785549/able-to-push-to-all-git-remotes-with-the-one-command

반응형