새로 만든 지점을 포함하여 기본적으로 모든 지점을 밀고 당기고 싶습니다.
내가 정의 할 수있는 설정이 있습니까?
그렇지 않으면 로컬에서 새 분기를 추가하고 서버에서 가져 오기를 원할 때 가장 간단한 방법은 무엇입니까?
이름이 같은 새 분기를 만들고 끌어 냈지만 작동하지 않습니다. 지점의 모든 원격 구성을 요구합니다. 어떻게 설정합니까?
새로 만든 지점을 포함하여 기본적으로 모든 지점을 밀고 당기고 싶습니다.
내가 정의 할 수있는 설정이 있습니까?
그렇지 않으면 로컬에서 새 분기를 추가하고 서버에서 가져 오기를 원할 때 가장 간단한 방법은 무엇입니까?
이름이 같은 새 분기를 만들고 끌어 냈지만 작동하지 않습니다. 지점의 모든 원격 구성을 요구합니다. 어떻게 설정합니까?
답변:
가장 간단한 방법은 다음과 같습니다.
git push --all origin
태그와 분기를 푸시합니다.
-u
예를 들어 git push --all origin -u
추적을 한 번 추가 하면 추적을 설정 한 후 간단히 사용할 수 있습니다 git push
.
git push --tags origin
모든 태그를 푸시하는 데 사용해야 했습니다.
최신 git을 사용하면 항상 모든 분기 (원격 추적 분기로 refs/remotes/origin/*
네임 스페이스에 git branch -r
또는로 표시)를 가져옵니다git remote show origin
.
기본적으로 ( push.default
config 변수의 문서 참조 ) 일치하는 분기 를 푸시합니다. 즉, 먼저 git push origin branch
git이 항상 푸시 하도록해야 합니다 git push
.
항상 모든 분기를 푸시 하려는 경우 푸시 기준 지정을 설정할 수 있습니다. 리모컨의 이름 origin
이 있다고 가정하면 git config 를 사용할 수 있습니다 .
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
또는 .git/config
다음과 같이 파일을 직접 편집 하십시오.
[원격 "원산지" url = user@example.com : /srv/git/repo.git 가져 오기 = + refs / heads / * : refs / remotes / origin / * 가져 오기 = + refs / tags / * : refs / tags / * 푸시 = + refs / heads / * : refs / heads / * 푸시 = + refs / tags / * : refs / tags / *
git push --all origin
모든 브랜치 및 태그를 한 번 게시하는 데 유용하지만, 현재 버전 '일치'시맨틱까지 기본 설정은 새 브랜치 또는 태그를 추가하지 않는 한 나중에 모든 브랜치를 푸시한다는 의미입니다. 설정 에 "푸시는 [...] 기본적으로 모든 지점은" 기록 된대로.
fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
push.default
은 simple
입니다.
푸시 사양에 +를 포함시키는 것은 아마도 나쁜 생각입니다 .git은 -f 없이도 빨리 감기를 수행하지 않으며 원격 서버가이를 수락하도록 설정하면 기록을 잃을 수 있습니다.
이것을 시도하십시오 :
$ git config --add remote.origin.push 'refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push 'refs/tags/*:refs/tags/*'
$ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*'
$ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*'
--global
각 저장소에 옵션을 추가하여 모든 리포지토리의 전역 기본값으로 만들 수도 있습니다 .
git remote add
.
아래 명령을 사용하여 모든 분기를 새 저장소로 마이그레이션했습니다.
~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-origin <url_of_new_repo>
~$ git push new-origin master
~$ git push new-origin --mirror
참고 : 리포지토리 를 Atlassian Stash 에서 AWS CodeCommit (빈 리포지토리)로 복제하는 동안 두 번째 마지막 (즉, 마스터 우선 푸시) 명령을 사용해야했습니다 . 이유는 확실하지 않지만 ( git push new-origin --mirror
) 기본 분기를 누른 후 이외의 다른 분기를 참조하고 있습니다 master
.
git push new_origin --all
다만, new_origin에 기원의 모든 지점을 현재 현지 지사를 밀어 넣습니다.
--bare
저장소가 일반 저장소와 약간 다르며 .git
파일이 아닌 파일 만 있습니다. 작업을 수행하지 않으면 완벽하게 충분합니다. 참조 --bare
및 --mirror
git-scm.com/docs/git-clone .
이전 리포지토리를 이전 리포지토리에서 새 리포지토리로 옮기고 로컬 리포지토리를 모두 가지고 있지 않은 경우 먼저 분기를 추적해야합니다.
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
그런 다음 새 원격 저장소를 추가하십시오.
git remote add bb <path-to-new-repo>
그런 다음이 명령을 사용하여 모두 푸시 할 수 있습니다.
git push -u bb --all
또는이 작업을 한 번 수행하지 않거나 로컬 분기 만 이동하려는 경우 여기의 다른 응답에 표시된 git config 명령을 사용하여 repo를 구성 할 수 있습니다.
중요한 점은 다른 응답은 모든 LOCAL 분기 만 푸시한다는 것입니다. 분기가 대체 REMOTE 저장소에만있는 경우 먼저 추적하지 않고 이동하지 않습니다. 여기에 제시된 for 루프가 도움이 될 것입니다.
git branch --track reponame origin/reponame
그렇지 않으면 현재 로컬 브랜치에서 모든 원격 브랜치를 추적하는 것입니다.
git branch -r | grep -v '\->' | sed 's/ origin\///'
원격 지사 이름 만 제공합니다.
사용 git branch -a
하지 않고 모든 가지를 보려면 다음을 실행해야합니다.
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
이제 모든 가지를 볼 수 있습니다 :
git branch
모든 가지를 밀어 넣으려면 다음을 시도하십시오.
git push --all
git fetch --all
있습니까?
모든 지점을 이전 리포지토리에서 새 리포지토리로 이동하는 경우 로컬 리포지토리에서 새 리포지토리로 푸시하기 전에 각 분기의 추적을 기존 오리진 분기로 설정해야합니다. 그렇지 않으면 모든 오리진 분기가 새로운 기원. 각 분기를 추적하거나 체크 아웃하여 수동으로 수행하거나 하나의 라이너를 사용하십시오.
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
이 한 줄 명령은이 페이지의 다른 답변에서 버전을 기반으로하지만 다음과 같은 이유로 더 좋습니다.
다음으로 원점을 전환하는 경우 이전 원점으로의 링크를 교체하고 새 리모콘을 가리 킵니다. bitbucket / github GUI를 사용하여 새 원격을 먼저 생성해야하지만 파일을 추가하지 마십시오. 병합 문제가 발생합니다. 예 :
git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git
이제 밀어 태그를 푸시하려면 두 번째 명령이 필요합니다.
git push -u --all origin
git push --tags origin
origin
구성에서 하드 코딩 이 없는 솔루션전역 gitconfig 에서 다음을 사용하십시오.
[remote]
push = +refs/heads/*
push = +refs/tags/*
모든 브랜치 및 모든 태그를 푸시합니다.
origin
설정에서 하드 코딩해서는 안 됩니까?하드 코딩하는 경우 :
origin
모든 리포지토리에서 리모컨으로 끝납니다 . 따라서 원점을 추가 할 수는 없지만을 사용해야 set-url
합니다.origin
(1 지점부터) 이미 존재 하므로 이름 바꾸기가 작동하지 않습니다.Jakub Narębski의 답변에 따라 :
최신 git을 사용하면 항상 모든 분기를 원격 추적 분기로 refs / remotes / origin / * 네임 스페이스로 가져옵니다.