git.fedorahosted.org에 리포지토리가 있고 github에서 내 계정으로 복제하여 페도라 호스트의 "공식"레포지토리를 제외하고 내 놀이터를 만들고 싶다고 가정 해보십시오. 처음에 그것을 복사하는 단계는 무엇입니까? github에는이 멋진 "포크"버튼이 있지만 분명한 이유로 이것을 사용할 수 없습니다.
그리고 페도라 호스트 리포지토리의 github 변경 사항을 어떻게 추적합니까?
git.fedorahosted.org에 리포지토리가 있고 github에서 내 계정으로 복제하여 페도라 호스트의 "공식"레포지토리를 제외하고 내 놀이터를 만들고 싶다고 가정 해보십시오. 처음에 그것을 복사하는 단계는 무엇입니까? github에는이 멋진 "포크"버튼이 있지만 분명한 이유로 이것을 사용할 수 없습니다.
그리고 페도라 호스트 리포지토리의 github 변경 사항을 어떻게 추적합니까?
답변:
git remote rename origin upstream
git remote add origin URL_TO_GITHUB_REPO
git push origin master
이제 다른 github 저장소와 마찬가지로 작업 할 수 있습니다. 업스트림에서 패치를 가져 오려면 간단히 실행하십시오 git pull upstream master && git push origin master
.
origin
표준 원격 위치 를 가리키는 강력한 규칙입니다 . 이 경우, github 위치는 아마도 정식 일 것입니다.
git remote add
. 그런 다음에 리모콘을 명시 적으로 지정하여 그 중 하나에 푸시 할 수 있습니다 git push
. 예 : git push foobar master
현재 분기를 master
원격 으로 밉니다 foobar
.
이 질문에 유용한 링크가있는 삭제 된 답변이 있습니다 : 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
error: failed to push some refs to 'https://github.com/username/testrep.git'
기존 리포지를 다른 곳으로 푸시하려면 다음을 수행해야합니다.
원래 저장소를 먼저 복제하십시오.
git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
복제 된 소스를 새 저장소로 푸시하십시오.
cd rhq
git push https://github.com/user/example master:master
당신은 변경 될 수 있습니다 master:master
에 source:destination
지점입니다.
특정 커밋 (분기)을 푸시하려면 다음을 수행하십시오.
원래 저장소에서 새 분기를 작성하고 체크 아웃하십시오.
git checkout -b new_branch
시작하려는 지점을 선택하고 재설정하십시오.
git log # Find the interesting hash
git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
또는 git cherry-pick
기존 HEAD에 추가 할 커밋을 선택하십시오 .
그런 다음 새 저장소로 푸시하십시오.
git push https://github.com/user/example new_branch:master
rebasing하는 -f
경우 강제 푸시에 사용하십시오 (권장되지 않음). git reflog
변경 기록을 보려면 실행 하십시오.
git push ... old_branch_name:new_branch_name
새 저장소에있는 본점으로 이전 저장소에서 기능 분기를 밀어 수 있습니다. 유용합니다!
로컬 리포지토리 (로컬 브랜치 등)를 새 리모컨으로 푸시하고 싶습니까? 아니면 기존의 리포지토리 (모든 브랜치, 태그 등)를 새 원격으로 미러링하고 싶습니까? 후자가 여기 에 git 저장소를 올바르게 미러링하는 방법 에 대한 훌륭한 블로그입니다 .
매우 중요한 내용은 블로그를 읽어 보는 것이 좋지만 짧은 버전은 다음과 같습니다.
새 디렉토리에서 다음 명령을 실행하십시오.
git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git
이 시도 전체 Git 저장소를 이동하는 방법을
다음을 사용하여 temp-dir 디렉토리에 로컬 저장소를 작성하십시오.
자식 클론 임시 디렉토리
temp-dir 디렉토리로 이동하십시오.
ORI의 다른 브랜치 목록을 보려면 다음을 수행하십시오.
git branch -a
다음을 사용하여 ORI에서 NEW로 복사하려는 모든 브랜치를 확인하십시오.
git checkout branch-name
이제 다음을 사용하여 ORI에서 모든 태그를 가져옵니다.
git fetch --tags
다음 단계를 수행하기 전에 다음 명령을 사용하여 로컬 태그 및 분기를 확인하십시오.
git tag
git branch -a
이제 다음 명령을 사용하여 ORI 저장소에 대한 링크를 지우십시오.
git remote rm origin
다음 명령을 사용하여 로컬 저장소를 새로 작성된 새 저장소에 연결하십시오.
git remote add origin <url to NEW repo>
이제 다음 명령으로 모든 브랜치 및 태그를 푸시하십시오.
git push origin --all
git push --tags
이제 ORI 저장소의 전체 사본이 있습니다.
간결하고 이해하기 쉬운 set-url 을 사용하는 솔루션을 찾았습니다 .
cd
로컬 컴퓨터의 기존 저장소에 저장하십시오 (아직 복제하지 않은 경우 먼저 수행하십시오)git remote set-url origin https://github.com/user/example.git
git push -u origin master
기존 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
나는 같은 문제가 있었다.
필자의 경우 로컬 컴퓨터에 원본 리포지토리가 있으므로 숨겨진 파일 (.git, .gitignore)없이 새 폴더에 복사본을 만들었습니다.
마지막으로 .gitignore 파일을 새로 만든 폴더에 추가했습니다.
그런 다음 로컬 경로에서 새 저장소를 만들고 추가했습니다 (내 경우에는 GitHub Desktop 사용).
수동으로 수행하는 방법은 다음과 같습니다 git remote set-url origin [new repo URL]
.
git clone <old remote>
열다 <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/*
저장소를 GitHub로 푸시하십시오. git push
둘 다 또는 여러 개의 리모컨을 사용할 수도 있습니다 .