모든 지사 및 태그를 포함하여 로컬 Git 리포지를 새로운 리모컨으로 푸시
로컬 Git 리포지토리를 사용하여 새로운 원격 리포지토리로 푸시하고 싶습니다 (원하는 경우 Beanstalk에 설정된 새로운 리포지토리). 지역 리포 지에는 몇 개의 지점과 태그가 있으며 모든 내 기록을 유지하고 싶습니다. 기본적으로 git push를 수행 해야하는 것처럼 보이지만 마스터 분기 만 업로드합니다. 리모컨에서 로컬 리포지토리의 전체 복제본을 얻도록 모든 것을 푸시하려면 어떻게해야합니까?
모든 분기 를 푸시하려면 다음 중 하나를 사용하십시오 (원격의 이름으로 REMOTE를 바꾸십시오 (예 : "origin")).
git push REMOTE '*:*'
git push REMOTE --all
모든 태그 를 푸시하려면 :
git push REMOTE --tags
마지막으로 하나의 명령 으로이 모든 것을 할 수 있다고 생각합니다.
git push REMOTE --mirror
그러나 --mirror
또한 리모컨을 밀어 넣으면 원하는 것이 아닐 수도 있습니다.
저와 같은 경우에 당신은 repo를 요구하고 이제 원격 원점을 다른 repo, 새로운 빈 repo로 전환하고 있습니다 ...
따라서 repo와 모든 분기가 내부에 있지만 git push --all
실제로 해당 분기를 푸시 하려면 해당 분기를 체크 아웃해야합니다 .
푸시하기 전에이 작업을 수행해야합니다.
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
뒤에
git push --all
여기에 내가있는 상황에 더 잘 맞는 동일한 일이 있습니다. 하나 이상의 리모컨이있는 경우 원격에서 원격 source
으로 모든 분기를 복제 destination
하려고하지만 사전에 모두 확인하지 않아도되는 문제를 해결합니다.
(Daniel의 솔루션으로 내가 가진 문제는 이미 체크 아웃 한 source
경우 원격 에서 추적 지점을 체크 아웃 하지 않는 것입니다. 즉, 푸시하기 전에 로컬 지점을 업데이트하지 않습니다)
git push destination +refs/remotes/source/*:refs/heads/*
참고 : 직접 CLI를 사용하지 않는 경우 별표를 이스케이프해야합니다.
git push destination +refs/remotes/source/\*:refs/heads/\*
이렇게하면 원격 source
에있는 모든 분기 가의 헤드 분기로 destination
푸시되어 빨리 감기되지 않을 수 있습니다. 여전히 태그를 별도로 푸시해야합니다.
맨 페이지를 git-push
읽을 가치가 있습니다. 이 웹 사이트 와 결합 하여 다음과 같이 작성했습니다 .git/config
.
[remote "origin"]
url = …
fetch = …
push = :
push = refs/tags/*
push = :
동안 수단은 '어떤'일치하는 '가지 (이미 원격 저장소에 존재하고 현지 대응이 즉 지점)을 눌러 " push = refs/tags/*
수단"모든 태그를 밀어. "
따라서 이제는 git push
일치하는 모든 분기 및 모든 태그를 푸시 하기 위해 실행 해야합니다.
예, 이것은 OP가 원했던 것이 아니며 (푸시 할 모든 브랜치가 이미 원격 측에 있어야 함), "어떻게 브랜치와 태그를 푸시합니까?"를 검색하는 동안이 질문을 찾는 사람들에게 도움이 될 수 있습니다 시각".
제 경우에는 효과가있었습니다.
git push origin --all
목적지가 비어 있으면 이것이 내가 찾은 가장 간결한 방법입니다. 빈 폴더로 전환 한 후 :
# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git
대체 https://...
에 대한 file:///your/repo
적절한 등.
리포지토리 미러링
저장소의 Bare 복제본을 작성하십시오.
git clone --bare https://github.com/exampleuser/old-repository.git
새 저장소로 미러 푸시하십시오.
cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
1 단계에서 작성한 임시 로컬 저장소를 제거하십시오.
cd ..
rm -rf old-repository.git
Git Large File Storage 객체가 포함 된 리포지토리 미러링
저장소의 Bare 복제본을 작성하십시오. 예제 username을 저장소를 소유 한 개인 또는 조직의 이름으로 바꾸고 예제 저장소 이름을 복제하려는 저장소의 이름으로 바꾸십시오.
git clone --bare https://github.com/exampleuser/old-repository.git
방금 복제 한 저장소로 이동하십시오.
cd old-repository.git
저장소의 Git Large File Storage 객체를 가져옵니다.
git lfs fetch --all
새 저장소로 미러 푸시하십시오.
git push --mirror https://github.com/exampleuser/new-repository.git
저장소의 Git Large File Storage 오브젝트를 미러로 푸시하십시오.
git lfs push --all https://github.com/exampleuser/new-repository.git
1 단계에서 작성한 임시 로컬 저장소를 제거하십시오.
cd ..
rm -rf old-repository.git
위의 지침은 Github 도움말에서 가져옵니다 : https://help.github.com/articles/duplicating-a-repository/
위의 답변에 여전히 명확하지 않은 내용이있어 사용자를 오도 할 수 있습니다. 첫째, 그것은 있는지의 git push new_origin --all
및 git push new_origin --mirror
원산지의 모든 지점을 복제 할 수 없습니다, 그것은 단지 당신의 new_origin에 가까운 존재 지점을 복제.
아래는 내가 테스트 한 두 가지 유용한 방법입니다.
1, 클론 베어 레포에 의해 복제. git clone --bare origin_url
다음 폴더를 입력 한 git push new_origin_url --mirror
뒤입니다 이런 식으로, 당신은 또한 사용할 수 있습니다 git clone --mirror origin_url
, 모두 --bare
와 --mirror
작업 공간을 포함하지 않는 베어 REPO를 다운로드합니다. 이것을 참조 하십시오
당신이 사용하여 자식의 repo 경우 2, git clone
맨발의 repo와 자식 작업 공간이있는 수단을, 당신이 사용할 수있는 git remote add new_origin new_origin_url
다음 git push new_origin +refs/remotes/origin/\*:refs/heads/\*
다음과git push new_origin --tags
이런 식으로 추가 헤드 브랜치를 얻을 수 있습니다.
브랜치 및 태그를 푸시하려면 (원격은 아님) :
git push origin 'refs/tags/*' 'refs/heads/*'
이것은 git이 허용하지 않는에 대한 --tags
및 --all
옵션 을 결합하는 것과 git push
같습니다.
@Daniel 답변을 바탕으로 내가 한 :
for remote in \`git branch | grep -v master\`
do
git push -u origin $remote
done
나는 이것들 중 어느 것도 나를 위해 제대로 작동하지 않는 것으로 나타났습니다. 이것을 불에 태워 버리지 만 어떤 이유로 든 다른 옵션을 제대로 사용할 수 없었습니다.
예상 결과는 다른 리포지토리 (예 : Github에서 다른 공급자로)에 "복제"된 리포지토리입니다.
- 모든 지점은 새로운 리모컨으로 생성됩니다
- 모든 지점 이력은 새로운 리모콘에서 생성됩니다
- (이것은 내가 시도한 모든 솔루션에서 누락되었습니다)
- 모든 태그는 새로운 리모컨에서 생성됩니다
- 소스가 이동 함 (주어진)
- 비파괴 적 (--mirror 옵션에 일시 중지)
내가 본 주요 문제는 모든 원격 지점이 새로운 원격에서 다시 생성되지 않았다는 것입니다. 명령이 수행 한 경우, 새 리모트에 분기 히스토리가 없었습니다 (예 : git checkout branch; git log
예상 분기 커밋을 표시하지 않음).
나는 (후자가 내가 필요한 것) git checkout -b branchname
과 같지 않다는 것을 알았다 git checkout branchname
. I 통지는 git checkout --track branchname
분기 기록을 당겨을하지 않은 것으로 보입니다.
내 솔루션 (powershell 기반) :
Function Git-FetchRemoteBranches {
$originalbranch = (git symbolic-ref HEAD).split("/")[-1]
Foreach ($entry in (git branch -r)) {
If ($entry -like "*->*") {
$branch = $entry.split("->")[2].split("/")[1]
}
else {$branch = $entry.split("/")[1]}
Write-Host "--Trying git checkout " -NoNewline
Write-Host "$branch" -Foreground Yellow
git checkout $branch
Remove-Variable branch -Force
""}
#Switch back to original branch, if needed
If ( ((git symbolic-ref HEAD).split("/")[-1]) -ne $originalbranch) {
"Switching back to original branch"
git checkout $originalbranch
Remove-Variable originalbranch -Force
}
}
git clone http://remoterepo
cd remoterepo
Git-FetchRemoteBranches
git remote add newremote
git push newremote --all
git push newremote --tags #Not sure if neeeded, but added for good measure
'Programming' 카테고리의 다른 글
리플렉션을 사용하여 패키지의 모든 클래스를 찾을 수 있습니까? (0) | 2020.02.12 |
---|---|
시뮬레이터 또는 에뮬레이터? (0) | 2020.02.12 |
사용자 입력 및 명령 행 인수 (0) | 2020.02.12 |
파이썬 : 목록에서 찾기 (0) | 2020.02.12 |
iOS에서 화면 너비와 높이를 얻는 방법은 무엇입니까? (0) | 2020.02.12 |