IT story

모든 가지를 당기고 밀도록 git 설정

hot-time 2020. 2. 9. 19:23
반응형

모든 가지를 당기고 밀도록 git 설정


새로 만든 가지를 포함하여 기본적으로 모든 가지를 밀고 당기고 싶습니다.

내가 정의 할 수있는 설정이 있습니까?

그렇지 않으면 로컬에서 새 분기를 추가하고 서버에서 가져 오기를 원할 때 가장 간단한 방법은 무엇입니까?

같은 이름의 새 지점을 만들고 끌어 냈지만 작동하지 않습니다. 지점의 모든 원격 구성을 요구합니다. 어떻게 설정합니까?


가장 간단한 방법은 다음과 같습니다.

git push --all origin

태그 및 분기를 푸시합니다.


최신 git을 사용하면 항상 모든 분기 (원격 추적 분기로 refs/remotes/origin/*네임 스페이스에 git branch -r또는로 표시)를 가져옵니다git remote show origin .

기본적으로 ( push.defaultconfig 변수 문서 참조 ) 일치하는 분기 를 푸시합니다. 즉, 먼저 git push origin branchgit이 항상 푸시 하도록해야 합니다 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

이 한 줄 명령은이 페이지의 다른 답변에서 버전을 기반으로하지만 다음과 같은 이유로 더 좋습니다.

  1. 이 페이지에서이 명령의 일부 오래된 변형과 달리 분기 추적을 올바르게 설정합니다.이 명령은 --track에 하나의 매개 변수 만 제공하므로 각 분기는 추적 마스터로 끝납니다.
  2. 개인적으로 원하지 않는 접두사 "origin /"없이 로컬 지점의 이름을 지정하며 지점을 정상적으로 체크 아웃 할 때 발생하는 것과 일치합니다.
  3. 이미 발생한 추적 마스터를 건너 뜁니다.
  4. 실제로 아무것도 체크 아웃하지 않으므로 빠릅니다.
  5. 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설정에서 하드 코딩해서는 안 됩니까?

하드 코딩하는 경우 :

  1. origin모든 저장소에서 리모컨으로 끝납니다 . 따라서 원점을 추가 할 수 없지만을 사용해야 set-url합니다.
  2. 도구가 다른 이름으로 리모컨을 만들면 모든 구성이 적용되지 않습니다. 그런 다음 리모컨의 이름을 바꿔야하지만 origin1 지점에서 이미 존재 하므로 이름 바꾸기가 작동하지 않습니다.

가져 오기는 현대 git에 의해 이미 처리되었습니다.

Jakub Narębski의 답변에 따라 :

현대식 git을 사용하면 항상 모든 분기를 원격 추적 분기로 refs / remotes / origin / * 네임 스페이스로 가져옵니다.

참고 URL : https://stackoverflow.com/questions/1914579/set-up-git-to-pull-and-push-all-branches



반응형