한 서버에서 새 서버로 GIT 저장소를 마이그레이션하는 방법


263

내가 가져가는 서버가 있습니다. 내가 남긴 것은 저장소뿐입니다. 이 서버는 내 프로젝트 중 하나의 원산지 (마스터)로 표시됩니다. 기록을 유지하기 위해 저장소를 이동하는 올바른 방법은 무엇입니까?


저장소에 대한 모든 정보 (org, 트렁크 등)는 저장소를 초기화하는 '.git'이라는 폴더에 저장됩니다. 따라서 여기에
Mansab Uppal

1
단순히 git config remote.origin.url newurl 참조 stackoverflow.com/questions/3011402/…
Niels

1
리포지토리와 모든 지점을 마이그레이션하려면 허용되는 답변 대신 jzwiener 또는 Roberto의 답변을 사용하십시오.
jonaglon

답변:


247

새로운 저장소 위치를 추가하려면

git remote add new_repo_name new_repo_url

그런 다음 컨텐츠를 새 위치로 푸시하십시오.

git push new_repo_name master

마지막으로 오래된 것을 제거하십시오

git remote rm origin

그런 다음 bdonlan이 말한 것을 수행하고 .git / config 파일을 편집하여 new_repo_name을 origin으로 변경하십시오. 원본 (원격 원격 저장소)을 제거하지 않으면 다음을 사용하여 변경 내용을 새 리포지토리로 푸시하면됩니다.

git push new_repo_name master

8
이전 저장소에서 새 저장소로 단일 분기 만 복사합니까?
Andrew Grimm

34
모든 지점을 마이그레이션하는 솔루션은 무엇입니까?
emmby

50
를 통해 모든 분기를 한 번에 푸시 할 수 있어야합니다 git push -u new_repo_name --all.
rmarscher 2016 년

10
모든 지점의 마이그레이션은 stackoverflow.com/a/18336145/923599
jzwiener

10
git-config 파일을 편집하는 대신이 명령이 저에게 git remote rename new_repo_name origin
Salim

210

모든 브랜치와 태그를 마이그레이션하려면 다음 명령을 사용해야합니다.

git clone --mirror [oldUrl]

모든 지점과 오래된 레포를 복제

cd the_repo
git remote add remoteName newRepoUrl

새 리모컨을 설정하려면

git push -f --tags remoteName refs/heads/*:refs/heads/*

심판 / 헤드 아래의 모든 심판을 푸시하기 (아마도 당신이 원하는 것)


5
힘내가 불평하고 --tagsrefs/heads/*:refs/heads/*호환되지 않습니다 --mirror. stackoverflow.com/a/26552740/1484831이 잘 작동했습니다.
Avigit

3
나는 이것을 사용했고 그것은 나를 위해 일했다. 아마 선출 된 대답이어야합니다. 로컬로 가져 오는 "코드"는 메타 데이터에 무거워서 뭔가 잘못되었을 경우 초보자에게는 불분명합니다.
nick

3
승인 된 답변이어야합니다. 다른 솔루션보다 훨씬 더 나은
트래비스 릭스

15
나는 새로운 원격 저장소의 모든 가지를 접두어로 refs/heads/refs/heads사용하여 접두어를 사용 git push -f --tags remoteName refs/heads/*:refs/heads/*했습니다.git push remoteName --mirror
dumbledad

1
push또한 지원합니다 --mirror. git clone --mirror; cd repo; git push --mirror new_remote트릭을 수행해야합니다
knittl

143

이것은 완벽하게 나를 위해 일했다 .

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

나는 이것이 당신의 현재 저장소의 거울을 만들고 그것을 새로운 위치로 푸시한다고 언급해야합니다. 따라서 큰 repos 또는 느린 연결에 시간이 걸릴 수 있습니다 .


15
***이 ***
Paul Lockwood

1
이것은 좋은 해결책입니다 git remote set-url origin <URL to my NEW repo location> (오래된 origin을 새로운 서버 / 위치로
rsync 한 후

2
이건 대단해 혼란스러운 다중 리모콘 없음
TaoPR

16
선호 git push --mirror origin이상 -f.
Aidiakapi

78

그것을 복사하십시오. 정말 간단합니다. :)

클라이언트 쪽에서는 클라이언트 로컬 리포지토리에서 .git / config를 편집하여 필요에 따라 리모컨이 새 URL을 가리 키도록합니다.


6
간단하게 복제 할 수도 있습니다. 또한 .git / config 파일을 직접 편집하는 대신 git remote rm origin을 사용할 수 있습니다. git remote add origin <새 저장소>.
ebneter

4
원격으로 rming하면 구성의 해당 섹션에서 구성이 손실되고 추가 단계를 수행하지 않고 복제하면 트렁크 이외의 분기가 손실됩니다. 이러한 문제를 해결할 수는 있지만 실제로는 rsync 만하면됩니다.
bdonlan

1
git 만 사용하여 작업을 수행하는 솔루션은 무엇입니까? rsync를 사용하기 어려운 추가 관리 후프가 필요합니다
emmby

2
이것은 또한 예를 들어 후크 및 기타 구성을 유지하므로 순수한 git 솔루션을 선호합니다
mnagel

65

이것은 다른 답변 중 일부에서 부분적으로 수행됩니다.

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new

6
사실 이것은 가장 완전하고 간단한 대답입니다.
Lawrence Dol

3
--mirror푸시에서 매우 중요하다 : 이것은 정답이어야한다
PaoloC

새 서버에서 새 리포지토리를 초기화 할 때는 완전 초기화를 수행해야합니다. 그렇지 않으면 푸시가 성공하지 않습니다.git init --bare
marco

35

나는 지시 사항을 따르기 위해 다른 사람들이 말한 것을 다시 게시하고 있습니다.

  1. 저장소 이동 : 새 서버, cd이제 저장소를 보유 할 상위 디렉토리에 로그인 rsync하고 이전 서버에서 복사 하는 데 사용 하십시오.

    new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
    
  2. 클라이언트가 새 저장소를 가리 키도록하십시오. 이제 사용하는 각 클라이언트에서 이전 원점에 대한 포인터를 제거하고 새 원점에 포인터를 추가하십시오.

    client> git remote rm origin
    client> git remote add origin user@new.server.com:path/to/repository.git
    

간단하고 효과적입니다. 서버 간의 트래픽을 제한하려면 --bwlimit = XXX 플래그를 추가 할 수 있습니다. 여기서 XXX는 초당 대역폭 (KB)입니다.
Greg Glockner

7
제거하고 추가하는 것보다 조금 낫습니다.git remote set-url origin user@new.server.com:path/to/repository.git
Chris KL

git + capistrano를 사용하여 서버에 배포하는 경우 localhost와 서버의 캐시 사본에서 두 위치에서 set-url origin을 사용해야합니다.
anandvc


10

BitBucket의 지침에 따라 모든 지점이있는 리포지를 이동했습니다. #캐릭터 다음에 설명이있는 단계가 있습니다 .

cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go

나를 위해 잘 작동했습니다.


8

다음 단계를 따르십시오

  • git remote 새로운 출처 추가
  • git push-모든 새로운 출처
  • git push-태그를 새로운 출처
  • 자식 원격 rm 원산지
  • 자식 원격 원산지 원산지

5

이것은 이 답변 에 대한 변형 이며, 현재 gitlab 이 git 저장소를 한 서버에서 다른 서버로 "마이그레이션"하기 위해 제안 합니다.

  1. 이전 프로젝트가 폴더에 existing_repo저장된 이라고 가정 existing_repo합니다.

  2. 새 서버에서 저장소를 작성하십시오. 새 프로젝트의 URL이git@newserver:newproject.git

  3. 명령 행 인터페이스를 열고 다음을 입력하십시오.

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@newserver:newproject.git
    git push -u origin --all
    git push -u origin --tags
    

이 방법의 장점은 이전 서버에 해당하는 분기를 삭제하지 않는다는 것입니다.


4

다음 명령을 사용할 수 있습니다.

git remote set-url --push origin new_repo_url

http://gitref.org/remotes/의

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)

4

다음과 같이 간단해야합니다.

git remote set-url origin git://new.url.here

이렇게하면 origin새 리포지토리 의 이름 을 유지 한 다음 다른 답변에 설명 된대로 기존 리포지토리로 새 리포지토리로 푸시합니다. 혼자 일하고 로컬 크립을 가지고 있다고 가정하면, 로컬 리포 내부에서 볼 수도 있습니다.

git push origin --mirror # origin points to your new repo

그러나 "git push --mirror"가 저장소를 백업하기에 충분합니까?를 참조하십시오 . (모두 사용하지 않고 --mirror한 번만 사용하십시오 ).


3

모든 커밋과 브랜치를 기존 리포지토리에서 새로운 리포지토리로 유지하려면 다음 지침을 따르십시오.

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>

1

git-copy 를 사용 하여 모든 히스토리와 리포지토리를 복제 할 수 있습니다 .

git copy http://a.com/old.git http://a.com/new.git

1

한 원본에서 다른 원본으로 이동하고 로컬 시스템에서 현재 원본의 백업을 유지하려면 다음 단계를 수행하십시오.

  1. 먼저 로컬로 이동하려는 (git) 폴더로 이동하십시오.
  2. 온라인으로 새 리포지토리 생성이 단계는 코드를 푸시 할 수있는 리포지토리를 생성합니다.

이제 폴더에서

git remote get-url origin

위의 명령은 현재 원격 원점 URL을 제공하며 마지막 단계에서 원점을 다시 설정하는 데 유용합니다.

git remote set-url origin git@github.newlocation:folder/newrepo.git

위의 명령은 원격 원점을 새로운 위치로 설정합니다

git push --set-upstream origin develop

위의 명령은 현재 활성 로컬 브랜치를 branchname develop으로 원격으로 푸시합니다. 물론 그것은 모든 역사가 푸시로 모든 역사를 유지합니다.

git remote set-url origin <original old origin>

위의 명령은 원격 원점을 현재 원점으로 다시 설정합니다. 기존 폴더에 있고 현재 로컬 폴더 이름을 리포지토리 복제를 위해 생성 할 새 폴더와 혼합하지 않기를 원할 때 원합니다. 당신은 방금 밀었습니다.

도움이 되었기를 바랍니다,


0

하나의 서버에서 새로운 서버로 #git 저장소를 마이그레이션하려면 다음과 같이하십시오.

git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS  NEW_REPOSITORY_PATH
#check out all remote branches 
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags

기존 리포지토리의 모든 원격 브랜치 및 태그가 새 리포지토리에 복사됩니다.

이 명령을 단독으로 실행 :

git push NEW_REPOSITORY_ALIAS

마스터 지점 (추적 지점 만) 만 새 저장소에 복사합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.