베어 리포지토리를 어떻게 업데이트합니까?


답변:


83

기본 리포지토리의 모든 개체를 복제하려면 기본 리포지토리에서이 작업을 수행하십시오.

git push --all <url-of-bare-repo>

또는 Bare Repo 내부에서 가져 오기를 수행하십시오.

git fetch <url-of-main-repo>

풀은와 병합을 원하기 때문에 풀을 수행 할 수 없으며 HEAD베어 리포지토리에는 없습니다.

나중에 리모컨을 추가하여 나중에 입력 할 수 있습니다.

git remote add <whatever-name> <url-of-other-repo>

그러면 간단하게 할 수 있습니다

git push --all <whatever-name>

또는

git fetch <whatever-name>

당신이있어. 만약이 REPO 내용에 따라 <whatever-name>입니다 origin, 당신도 전부를 생략 할 수 있습니다.

면책 조항 : 나는 자식 전문가가 아닙니다. 내가 잘못 말하면 깨달음을 원합니다!

업데이트 : 의견을 읽으십시오!


7
git-fetch --all베어 리포지토리 내부를 수행 했을 때 주 리포지토리에 대한 업데이트를 보지 못했지만 메인 리포지토리 git push --all <url-of-bare-repo>에서 업데이트를 볼 때의 업데이트가 표시됩니다 git log. 아마도 이것에 대한 간단한 설명이 있습니다-누군가 설명 할 수 있습니까?
pho79

2
@Thomas-예, "보지 못했습니다"라는 말 git log은 맨발로이 업데이트를 표시하지 않는다는 것을 의미 합니다. ( git log --all맨손으로 리포지토리를 복제하여 생성 된 작업 리포지토리를 통해 git log --all또는 거기에 표시되어야하는 새 파일을 보거나하지 않음). 직접 확인하는 것은 매우 빠른 테스트입니다. 대부분 내가 잃어버린 것이 궁금합니다.
pho79

71
원격 리포지토리가 액세스 권한이 없거나 푸시를 실행할 수없는 github과 같은 경우 git fetch -q origin master:master로컬 베어 리포지토리 내부에서 수행 할 수 있습니다 . 이것은 github의 마스터 브랜치에서 새로운 것을 가져오고 로컬 마스터 브랜치를 업데이트합니다.
Altreus

4
@Altreus Indeed master:master는 HEAD를 원격 리포지토리 로 앞으로 이동시키는 데 필요한 것입니다. 내 경우에는 문제 때문에 git이 없기 때문에 맨손으로 repo에 연결할 수 없습니다. 그것이 해결 될 때까지 나는 역 터널을하고 다음을 사용하여 중앙 저장소로 가져옵니다 git fetch ssh://localhost:8765/... master:master. 매력처럼 작동합니다. 감사!
estani

3
@Altreus 모든 지점을 원한다면 할 수 있습니다git fetch origin *:*
JBert

71

다음 명령을 사용하여 리포지토리를 만들었습니다.

git clone --bare <remote_repo>

그런 다음 Thomas의 답변을 사용하여 베어 클론을 업데이트하려고 시도했지만 작동하지 않았습니다. 베어 리포지토리를 업데이트하려면 (Let_Me_Be가 요청한 것으로 생각) 미러 리포지토리를 만들어야했습니다.

git clone --mirror <remote_repo>

그런 다음 미러 리포지토리에서 다음 명령을 실행하여 기본 리포지토리의 업데이트를 가져올 수 있습니다.

git fetch --all

Git 리포지토리 미러링을 읽어서이 솔루션 을 보았습니다.


22
기존 Bare Repo를 미러로 변경하려면 <REPO> .git / config의 git config 파일에 2 줄을 추가하기 만하면됩니다. 에 [remote "origin"]섹션을 추가 fetch = +refs/*:refs/*하고mirror = true
이삭 Betesh에게

@IsaacBetesh 당신은 내 하루를 저장 :)
smc

54

로 다시 이외의 유일한 해결책은 git clone --mirror있다 그레고르에서 :

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

그러면 git fetch업데이트를 볼 수 있습니다. 이상한 점은 전에는 remote구성된 것이 있지만에 나열된 분기가 없다는 것입니다 git branch -a.


1
이것은 정말로 나를 도왔다! Capistrano project / repo는이 설정을 사용하여 한 라이너 git remote update가 작업을 수행 할 수 있도록 합니다.
Minqi Pan

1
원격가 강제 업데이트 또는 지점을 삭제 (그리고 당신이 그 변경 사항을 반영 할) 경우, 당신은 추가해야 --force하고 --prune받는 사람 각각 git fetch라인.
Elliott Slaughter

46

가정 :

$ git clone --bare https://github.com/.../foo.git

다음으로 가져 오기 :

$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune

참고 : 먼저 디렉토리에있는 --git-dir=foo.git경우 필요하지 않습니다 cd.


2
언제 발생하는지 알지 못하지만 origin정의되어 있지 않은 경우 언제든지 origin부품을 원래 저장소의 경로 / URL로 바꿀 수 있습니다 . 예 :$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
antak

이것이 바로 내가 찾던 것입니다. 이것은 완벽하게 작동했습니다.
Maxime Rouiller 작성일 :

13

주위를 많이 어지럽 힌 후 이것이 저에게 효과적이라는 것을 알았습니다.

한번:

git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

매번 동기화하고 싶습니다 :

cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git  fetch ssh://git@source.address:2000/repo
git push --mirror remote_site

7
세 번째 줄 ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*')이 열쇠입니다. 좋은 답변 감사합니다!
peterh-Reinstate Monica

2
@ peterh가 말했듯이 그 선 git config remote.origin.fetch 'refs/heads/*:refs/heads/*'이 답입니다. 이 명령을 치고 난 후, 그냥 git fetchrepo가 ​​원격 명령 과 동기화됩니다.
joker

3

Bare 저장소를 원격 저장소로 추가 한 다음을 사용하십시오 git push.


따라서 밀지 않고이 작업을 수행하려면 베어 리포지토리를 사용할 수 없으며 심볼릭 링크 또는 이와 유사한 것을 사용할 수 있습니까?
Šimon Tóth

푸시는 리포지토리 내용을 베어 리포지토리로 전송하는 일반적인 방법이므로 피할 필요가 없습니다.
Philipp

2
항상 밀 수는 없습니다. 예를 들어, 베어가 개인 네트워크에 있고 주 리포지토리가 공개 네트워크 인 경우 (예 : GitHub에서)
fanf42

0

나 에게이 조합은 효과가 있었다.

git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror

가져 오기에 대한 -u 매개 변수가 필요했습니다. 그렇지 않으면 "비 베어 리포지토리의 현재 분기 참조 / 헤드 / 마스터로 가져 오기 거부"( https://stackoverflow.com/a/19205680/4807875 참조 ) 오류 메시지가 나타납니다.

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