상황은 이렇습니다. 랩톱 A와 워크스테이션 B라는 두 대의 컴퓨터가 있습니다. B에는 고정 IP가 있고 A에는 동적 IP가 있으며 B에서 A로의 연결을 피하고 싶습니다(Ssh 터널 설정과 같이 매개 변수를 위해 B에서 A로의 SSH는 불가능하다고 가정).
/home/user/foo.git
두 시스템 모두에 git 저장소가 있습니다. 문제: A:/home/user/foo.git
A의 변경 사항 처리, 및 병합 B:/home/user/foo.git
. 결국 두 저장소는 모두 동일해야 합니다.
내가 생각할 수 있는 가장 간단한 해결책은 다음과 같습니다.
A:~$ cd foo.git
A:~/foo.git$ git commit -a
A:~/foo.git$ ssh B
B:~$ cd foo.git
B:~/foo.git$ git commit -a
B:~/foo.git$ logout
A:~/foo.git$ git pull ssh://B/home/user/foo.git
A:~/foo.git$ git push ssh://B/home/user/foo.git master
(이 작업을 수행하려면 이에 대한 답변에 설명된 대로 B의 git 구성을 변경하고 수신 후 후크를 추가해야 했습니다.스택 오버플로 질문)
내 질문:
1) 위 내용이 맞나요? 2) 동일한 목표를 달성하는 더 쉬운 방법이 있습니까?
답변1
당신이받은 후 후크제 생각에는 매우 무서운 경고가 몇 가지 있습니다!
비슷한 설정이 있지만 서버 B에는 저장소 복사본이 두 개 있습니다. 하나는 기본 원격("소스")으로 사용되는 베어 저장소입니다. 그러면 "git push" 및 "git pull"에 대한 매개변수를 제공할 필요가 없습니다. 마지막으로 당신이 언급한 명령을 단순화한 것이 바로 이것입니다. (저의 경우 B는 서버입니다. 그대로 둘 수 있는 ARM 상자가 있습니다.)
"Git을 실제로 사용하지 않는" 경우 이것이 반드시 최선의 아이디어는 아닙니다. Git은 강력하게 설계되었지만 UI는 여전히 다른 DVCS만큼 일관성이 없습니다. 이 목적을 위한 더 간단한 도구는 다음과 같습니다.
http://git-annex.branchable.com/assistant/(새로운 - 아직 시도하지 않았습니다)
http://www.cis.upenn.edu/~bcpierce/unison/(오래된 대기, SSH를 통해 작동)
Dropbox(무료는 아니며 인터넷 연결이 필요하지만 유연하고 LAN을 통한 전송도 최적화됨)
아니면 Mercurial이나 심지어 Darcs도 있습니다. 나는 둘 다 추가 베어 저장소를 요구하거나 커밋 후크를 걱정하는 Git의 문제를 피한다고 생각합니다. Mercurial은 Git보다 사용자 친화적이어야 합니다. Darcs의 디자인은 다른 DVCS와 다르기 때문에 이것이 최선의 아이디어가 아닐 수도 있습니다. 문서를 보면 Bazaar는 이 시나리오에 대해 회의적인 것 같습니다.
답변2
B에서 A로 SSH를 연결할 수 없지만 A에서 B로 SSH를 연결할 수 있는 경우역방향 SSH 터널 설정.
답변3
내 생각엔 그게 너한테 나쁜 것 같아 git
, 나도 생각해rsync
파일을 동기화 상태로 유지하기 때문에 작업에 더 적합합니다. 제 생각에는 다음과 같은 이유로 git이 이상적이지 않습니다.
- 분명히 분기/버전 관리/분산 모델이 필요하지 않습니다.
- 파일을 처리해야 합니다. git은 파일을 직접 처리하지 않습니다. 즉, git은 파일 시스템(기본적으로 파일 및 디렉터리)의 모든 "객체"를 SHA1 해시로 처리하므로 실제로 파일을 복구할 수 있는 방법이 없습니다. 특정 파일에 대해 git이 알 수 있는 유일한 것은 브랜치의 내용이 변경되었는지 여부뿐이며 중간에 실제 추적도 유지하지 않습니다. 예를 들어 체크섬은 커밋할 때 수행되는 것이 아니라 커밋할 때 수행됩니다. 스테이지에 파일을 추가합니다.