Git을 기존 리포지토리를 새로운 원격 리포지토리 서버로 푸시 할 수 있습니까?


494

git.fedorahosted.org에 리포지토리가 있고 github에서 내 계정으로 복제하여 페도라 호스트의 "공식"레포지토리를 제외하고 내 놀이터를 만들고 싶다고 가정 해보십시오. 처음에 그것을 복사하는 단계는 무엇입니까? github에는이 멋진 "포크"버튼이 있지만 분명한 이유로 이것을 사용할 수 없습니다.

그리고 페도라 호스트 리포지토리의 github 변경 사항을 어떻게 추적합니까?

답변:


751
  1. github에서 새로운 저장소를 만듭니다.
  2. 페도라 호스트에서 로컬 시스템으로 리포지를 복제합니다.
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

이제 다른 github 저장소와 마찬가지로 작업 할 수 있습니다. 업스트림에서 패치를 가져 오려면 간단히 실행하십시오 git pull upstream master && git push origin master.


14
원래 원점의 이름을 바꿀 이유가 없습니다. 새로운 운동장을 다른 곳으로 불러보세요.
tacaswell

34
@tcaswell 기술적으로 아니요,하지만 origin표준 원격 위치 를 가리키는 강력한 규칙입니다 . 이 경우, github 위치는 아마도 정식 일 것입니다.
troelskn

1
나는 '업스트림'을 정식 위치로 생각하지만 이것이 머리카락을 나누기 시작한다고 생각합니다.
tacaswell

3
어쩌면 나는 다른 질문을 게시해야하지만 너희들이 내가 원하는 것을 논의하고 있다고 생각한다. 기존 리모컨을 교체하지 않고 새로운 리모컨을 추가하고 싶습니다. 그래서 기존 저장소에서 계속 끌어 올 수 있지만 새로운 리모컨으로 변경 사항을 푸시 할 수 있습니다.
ThatAintWorking

13
@ThatAintWorking 아마도 새로운 질문을 열어야 할 것입니다. 그러나 간단히 말해서 명령으로 몇 가지 리모컨을 추가 할 수 있습니다 git remote add. 그런 다음에 리모콘을 명시 적으로 지정하여 그 중 하나에 푸시 할 수 있습니다 git push. 예 : git push foobar master현재 분기를 master원격 으로 밉니다 foobar.
troelskn

108

이 질문에 유용한 링크가있는 삭제 된 답변이 있습니다 : https://help.github.com/articles/duplicating-a-repository

요점은

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

OP의 예 :

로컬 컴퓨터에서

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git

5
베어 클론의 이점과 미러는 단순히 다른 리모컨을 추가하고 밀어내는 것보다 뛰어 납니까? 현재 브랜치뿐만 아니라 모든 브랜치가 푸시됩니까? (그렇다면, 이것은 주목할만한 대답의 한계처럼 보인다.)
yoyo

3
이것은 내가 찾던 정보였습니다. --bare / --mirror는 일반적으로 사람들이 수행하고자하는 것입니다! 이것은 중요한 답변입니다! 감사합니다
claf

1
큰! 주제 질문에 대한 정답입니다. 감사! 내가 이렇게하지 않으면 난 항상 얻는다error: failed to push some refs to 'https://github.com/username/testrep.git'
Denis Babarykin

45

기존 리포지를 다른 곳으로 푸시하려면 다음을 수행해야합니다.

  1. 원래 저장소를 먼저 복제하십시오.

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. 복제 된 소스를 새 저장소로 푸시하십시오.

    cd rhq
    git push https://github.com/user/example master:master
    

당신은 변경 될 수 있습니다 master:mastersource:destination지점입니다.


특정 커밋 (분기)을 푸시하려면 다음을 수행하십시오.

  1. 원래 저장소에서 새 분기를 작성하고 체크 아웃하십시오.

    git checkout -b new_branch
    
  2. 시작하려는 지점을 선택하고 재설정하십시오.

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    또는 git cherry-pick기존 HEAD에 추가 할 커밋을 선택하십시오 .

  3. 그런 다음 새 저장소로 푸시하십시오.

    git push https://github.com/user/example new_branch:master
    

    rebasing하는 -f경우 강제 푸시에 사용하십시오 (권장되지 않음). git reflog변경 기록을 보려면 실행 하십시오.


2
git push ... old_branch_name:new_branch_name새 저장소에있는 본점으로 이전 저장소에서 기능 분기를 밀어 수 있습니다. 유용합니다!
gorjanz

이것이 내가 할 수있는 가장 간단한 방법이었습니다.
Adam

15

로컬 리포지토리 (로컬 브랜치 등)를 새 리모컨으로 푸시하고 싶습니까? 아니면 기존의 리포지토리 (모든 브랜치, 태그 등)를 새 원격으로 미러링하고 싶습니까? 후자가 여기 에 git 저장소를 올바르게 미러링하는 방법 에 대한 훌륭한 블로그입니다 .

매우 중요한 내용은 블로그를 읽어 보는 것이 좋지만 짧은 버전은 다음과 같습니다.

새 디렉토리에서 다음 명령을 실행하십시오.

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

나는 이것이 링크라고 생각한다 : blog.plataformatec.com.br/2013/05/…
David David

11

이 시도 전체 Git 저장소를 이동하는 방법을

  1. 다음을 사용하여 temp-dir 디렉토리에 로컬 저장소를 작성하십시오.

    자식 클론 임시 디렉토리

  2. temp-dir 디렉토리로 이동하십시오.

  3. ORI의 다른 브랜치 목록을 보려면 다음을 수행하십시오.

    git branch -a
    
  4. 다음을 사용하여 ORI에서 NEW로 복사하려는 모든 브랜치를 확인하십시오.

    git checkout branch-name
    
  5. 이제 다음을 사용하여 ORI에서 모든 태그를 가져옵니다.

    git fetch --tags
    
  6. 다음 단계를 수행하기 전에 다음 명령을 사용하여 로컬 태그 및 분기를 확인하십시오.

    git tag
    
    
    git branch -a
    
  7. 이제 다음 명령을 사용하여 ORI 저장소에 대한 링크를 지우십시오.

    git remote rm origin
    
  8. 다음 명령을 사용하여 로컬 저장소를 새로 작성된 새 저장소에 연결하십시오.

    git remote add origin <url to NEW repo>
    
  9. 이제 다음 명령으로 모든 브랜치 및 태그를 푸시하십시오.

    git push origin --all
    
    
    git push --tags
    
  10. 이제 ORI 저장소의 전체 사본이 있습니다.


9

간결하고 이해하기 쉬운 set-url 을 사용하는 솔루션을 찾았습니다 .

  1. Github에서 새로운 저장소를 만듭니다
  2. cd 로컬 컴퓨터의 기존 저장소에 저장하십시오 (아직 복제하지 않은 경우 먼저 수행하십시오)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master

9

기존 Git 리포지토리가있는 경우 :

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags

1
명확하게
말하면

7

이 명령으로 GIT 저장소 URL을 변경하여 새 저장소를 가리 키기 만하면됩니다.

git remote set-url origin [new repo URL]

예: git remote set-url origin git@bitbucket.org:Batman/batmanRepoName.git

이제 밀고 당기는 것이 새로운 REPO에 연결되었습니다.

그런 다음 정상적으로 밀어 넣으십시오.

git push -u origin master

2

나는 같은 문제가 있었다.

필자의 경우 로컬 컴퓨터에 원본 리포지토리가 있으므로 숨겨진 파일 (.git, .gitignore)없이 새 폴더에 복사본을 만들었습니다.

마지막으로 .gitignore 파일을 새로 만든 폴더에 추가했습니다.

그런 다음 로컬 경로에서 새 저장소를 만들고 추가했습니다 (내 경우에는 GitHub Desktop 사용).


1

수동으로 수행하는 방법은 다음과 같습니다 git remote set-url origin [new repo URL].

  1. 저장소를 복제하십시오. git clone <old remote>
  2. GitHub 리포지토리 생성
  3. 열다 <repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    리모컨 (url 옵션)을 변경하십시오.

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. 저장소를 GitHub로 푸시하십시오. git push

둘 다 또는 여러 개의 리모컨을 사용할 수도 있습니다 .


나는 같은 문제를 찾고 있었고 똑같이하고 운동했다.
Mohit Patidar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.