대신에 :
git push origin --all && git push nodester --all && git push duostack --all
단 하나의 명령으로 그렇게 할 수 있습니까?
감사 :)
all
모든 리모컨을 밀어 넣을 리모컨 을 만들려면 다음을 참조하십시오. stackoverflow.com/a/18637593/802365
대신에 :
git push origin --all && git push nodester --all && git push duostack --all
단 하나의 명령으로 그렇게 할 수 있습니까?
감사 :)
all
모든 리모컨을 밀어 넣을 리모컨 을 만들려면 다음을 참조하십시오. stackoverflow.com/a/18637593/802365
답변:
git remote | xargs -L1 git push --all
master
푸시하려는 브랜치로 교체하십시오 .
git remote | xargs -L1 -I R git push R master
git config --global alias.pushall '!git remote | xargs -L1 git push --all'
실행 git pushall
하면 이제 모든 분기가 모든 리모컨으로 푸시됩니다.
xargs: illegal option -- l
OSX에. 그것을 알아 git remote | xargs -L1 git push
man xargs
옵션 -l
이 POISX 사양에 없기 때문에 더 이상 사용되지 않는다고 말합니다 .
!
에서 다음은 내부 git 명령이 아니라 외부 셸 명령입니다.
all
이름에 여러 개의 리포 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 fetch --all
그런 푸시를 한 직후 에 달려야 합니다.
all
은 사용 가능한 새 URL을 리모트 에 추가해야 하지만 git remote | xargs -L1 git push --all
새 리모트는 자동으로 선택한다는 것입니다.
all
커밋을 보낼 때마다 타이핑을하지 않으려면 "all"대신 "origin"을 사용하십시오.git remote set-url --add origin nodester-host:path/proj.git
git push
하지 않으면 그렇지 않으면 모든 URL이 업데이트되지 않습니다. 이에 따라 답변이 업데이트 됨
항상 repo1, repo2 및 repo3으로 푸시하고 있지만 항상 repo1에서만 가져 오려면 원격 'origin'을 다음과 같이 설정하십시오.
[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
specialBranch
[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 push
인수없이 그냥 할 수 있기 때문에 실제로 정말 편리합니다 .
.git / config 파일을 편집하는 대신 CLI를 사용하여 다음 명령을 사용할 수 있습니다.
# 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
}
예 : 리포지토리에 3 개의 리모컨 (rem1, rem2 및 rem3)이 있다고 가정합니다.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
git hooks 를 사용할 수 있습니다 -특히 pre-push
: 원본이 아닌 푸시를에 추가하십시오 .git/hooks/pre-push
.