모든 가지를 당기고 밀도록 git 설정
새로 만든 가지를 포함하여 기본적으로 모든 가지를 밀고 당기고 싶습니다.
내가 정의 할 수있는 설정이 있습니까?
그렇지 않으면 로컬에서 새 분기를 추가하고 서버에서 가져 오기를 원할 때 가장 간단한 방법은 무엇입니까?
같은 이름의 새 지점을 만들고 끌어 냈지만 작동하지 않습니다. 지점의 모든 원격 구성을 요구합니다. 어떻게 설정합니까?
가장 간단한 방법은 다음과 같습니다.
git push --all origin
태그 및 분기를 푸시합니다.
최신 git을 사용하면 항상 모든 분기 (원격 추적 분기로 refs/remotes/origin/*
네임 스페이스에 git branch -r
또는로 표시)를 가져옵니다git remote show origin
.
기본적으로 ( push.default
config 변수 문서 참조 ) 일치하는 분기 를 푸시합니다. 즉, 먼저 git push origin branch
git이 항상 푸시 하도록해야 합니다 git push
.
당신이 할 경우 항상 모든 지점을 누르면 , 당신은 푸시 refspec을 설정할 수 있습니다. 리모컨의 이름 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이 -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/*'
아래 명령을 사용하여 모든 지점을 새 저장소로 마이그레이션했습니다.
~$ 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
.
이전 리포지토리를 이전 리포지토리에서 새 리포지토리로 옮기고 모든 기존 리포지토리가 로컬에없는 경우 먼저 추적해야합니다.
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 -a
하지 않고 모든 가지를 보려면 다음을 실행해야합니다.
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
이제 모든 가지를 볼 수 있습니다 :
git branch
모든 가지를 밀어 넣으려면 다음을 시도하십시오.
git push --all
모든 지점을 이전 리포지토리에서 새 리포지토리로 이동하는 경우 로컬 리포지토리에서 새 리포지토리로 푸시하기 전에 각 분기의 추적을 기존 오리진 분기로 설정해야합니다. 그렇지 않으면 모든 오리진 분기가 새로운 기원. 각 분기를 추적하거나 체크 아웃하여 수동으로 수행하거나 하나의 라이너를 사용하십시오.
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done
이 한 줄 명령은이 페이지의 다른 답변에서 버전을 기반으로하지만 다음과 같은 이유로 더 좋습니다.
- 이 페이지에서이 명령의 일부 오래된 변형과 달리 분기 추적을 올바르게 설정합니다.이 명령은 --track에 하나의 매개 변수 만 제공하므로 각 분기는 추적 마스터로 끝납니다.
- 개인적으로 원하지 않는 접두사 "origin /"없이 로컬 지점의 이름을 지정하며 지점을 정상적으로 체크 아웃 할 때 발생하는 것과 일치합니다.
- 이미 발생한 추적 마스터를 건너 뜁니다.
- 실제로 아무것도 체크 아웃하지 않으므로 빠릅니다.
- git branch -r의 출력에서->를 넘어 뜨리지 않도록합니다.
다음으로 원점을 전환하는 경우 이전 원점으로의 링크를 교체하고 새 리모콘을 가리 킵니다. 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 지점에서 이미 존재 하므로 이름 바꾸기가 작동하지 않습니다.
가져 오기는 현대 git에 의해 이미 처리되었습니다.
Jakub Narębski의 답변에 따라 :
현대식 git을 사용하면 항상 모든 분기를 원격 추적 분기로 refs / remotes / origin / * 네임 스페이스로 가져옵니다.
참고 URL : https://stackoverflow.com/questions/1914579/set-up-git-to-pull-and-push-all-branches
'IT story' 카테고리의 다른 글
대시를 제외한 문자열에서 영숫자가 아닌 문자를 모두 제거하려면 어떻게합니까? (0) | 2020.02.09 |
---|---|
PHP에서 선행 0으로 숫자 서식 지정 (0) | 2020.02.09 |
파일이 더 이상 존재하지 않으면 Windows 서비스를 어떻게 제거합니까? (0) | 2020.02.09 |
힘내 푸시 오류 : 저장소 데이터베이스에 개체를 추가 할 수있는 권한이 없습니다 (0) | 2020.02.09 |
Git에 가장 적합한 시각적 병합 도구는 무엇입니까? (0) | 2020.02.09 |