이동할 때 컴퓨터 간 git 저장소 동기화?


89

제가 데스크톱 PC와 노트북을 가지고 있고 때로는 데스크톱에서 작업하고 때로는 노트북에서 작업한다고 가정 해 보겠습니다.

git 저장소를 앞뒤로 이동하는 가장 쉬운 방법은 무엇입니까?

git 리포지토리가 동일하기를 원하므로 다른 컴퓨터에서하던 작업을 계속할 수 있습니다.

두 컴퓨터에 동일한 분기와 태그가 있는지 확인하고 싶습니다.

고마워요 요한

참고 : SubVersion으로이 작업을 수행하는 방법을 알고 있지만 이것이 git에서 어떻게 작동하는지 궁금합니다. 더 쉬우면 세 번째 PC를 두 개의 PC가 동기화 할 수있는 클래식 서버로 사용할 수 있습니다.

참고 : 두 컴퓨터 모두 Linux를 실행합니다.


업데이트 :

이제 서버의 베어 git 리포지토리와 KingCrunch의 push 명령 구문을 사용하여 XANI :의 아이디어를 시도해 보겠습니다. 이 예에는 두 개의 클라이언트와 하나의 서버가 있습니다.

그럼 먼저 서버 부분을 만들어 보겠습니다.

ssh user@server
mkdir -p ~/git_test/workspace
cd ~/git_test/workspace
git --bare init

그런 다음 다른 컴퓨터 중 하나에서 복제로 저장소 사본을 얻으려고합니다.

git clone user@server:~/git_test/workspace/
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/
warning: You appear to have cloned an empty repository.

그런 다음 해당 저장소로 이동하여 파일을 추가하십시오.

cd workspace/
echo "test1" > testfile1.txt
git add testfile1.txt
git commit testfile1.txt -m "Added file testfile1.txt"
git push origin master

이제 서버가 testfile1.txt로 업데이트됩니다.

어쨌든 다른 컴퓨터에서이 파일을 가져올 수 있는지 봅시다.

mkdir -p ~/git_test/repo2
cd ~/git_test/repo2
git clone user@server:~/git_test/workspace/
cd workspace/
git pull

이제 우리는 테스트 파일을 볼 수 있습니다.

이 시점에서 더 많은 콘텐츠로 편집하고 서버를 다시 업데이트 할 수 있습니다.

echo "test2" >> testfile1.txt
git add testfile1.txt
git commit -m "Test2"
git push origin master

그런 다음 첫 번째 클라이언트로 돌아가서 업데이트 된 파일을보기 위해 git pull을 수행합니다. 이제 두 컴퓨터 사이를 오가며 원하는 경우 세 번째 컴퓨터를 추가 할 수 있습니다.


git을 사용하여 PC1에서 PC2로 빠르게 동기화하는 프로세스를 자동화하는 동기화 스크립트 (이 사용 사례에서는 rsync보다 수백 배 빠릅니다!) : stackoverflow.com/questions / 4948190 /…
Gabriel Staples

답변:


28

여러 가지 접근 방식이 있다고 생각합니다. 어떻게 처리하는지 설명하겠습니다.

여러 git-repositories를 보유하는 24/7 서버로 하나의 넷북이 있습니다. 거기에서 나는 SSH를 통해 변경 사항을 푸시하고 가져옵니다. 외부에서 액세스하려면 dyndns.org를 사용합니다. 특히 일부 리포지토리에 액세스해야하는 시스템이 두 개 이상이기 때문에 제대로 작동합니다.

업데이트 : 약간의 예. 내 넷북이 "넷북"이라고 가정 해 보겠습니다. 거기에 저장소를 만듭니다.

$ ssh username@netbook.local
$ cd ~/git
$ mkdir newThing
$ cd newThing
$ git init --bare

내 데스크탑에서 나는 그것의 복제본을 생성하는 것보다 낫습니다. 어쩌면 몇 개의 파일을 추가 할 것입니다

$ git clone username@netbook.local:/home/username/git/newThing
$ git add .
$ git commit -m "Initial"
$ git push origin master

내 노트북에서도 동일한 작업을 수행하지만 LAN 외부에서 원격 액세스하려면 외부 주소도 추가합니다.

$ git clone username@netbook.local:/home/username/git/newThing
$ git remote add externalName username@mydyndns.home-ip.org:/home/username/git/newThing
$ git pull externalName master

git (/ git 워크 플로)이 작동하는 방식입니다. 원하는만큼 원격 저장소를 추가 할 수 있습니다. 둘 이상의 동일한 "물리적"저장소를 참조하는 경우에는 중요하지 않습니다. 자신의 로컬 "서버"가 필요하지 않으며 ssh 액세스 권한이있는 모든 공용 서버를 사용할 수 있습니다. 물론 외부에서 액세스 할 필요가 없다면 공용 서버가 전혀 필요하지 않습니다. 베어 리포지토리는 데스크톱 시스템에있을 수도 있으며 로컬 파일 시스템 내에 작업 복사본 리포지토리를 만들 수 있습니다.

$ mkdir myRepo; cd myRepo
$ git init --bare
$ cd /path/to/myProject
$ git remote add origin /path/to/myRepo
$ git add .; git commit -m "Initial"; git push origin master

이것이 내가 이것을 처리하는 방법이고 나는 나를 위해 꽤 잘 작동합니다 (완벽하지 않은 경우;))

읽을 거리 : http://progit.org/ Really good book.-


리포지토리에 다른 방법을 사용하면 어떻게 보일까요? 예를 들어 답변을 명확히 하시겠습니까?
Johan

감사합니다, 그 예는 많은 것을 명확히했습니다 :)
Johan

6

한 상자에서 다른 상자로 리포지토리를 복제 한 다음 git fetch다른 상자에서 할 수 있도록 두 개의 리포지토리를 설정합니다 .

리모트 origin의 이름을에서 다른 상자의 이름으로 바꾸면 리모트 브랜치를 더 쉽게 읽을 수 있습니다.

사용 git fetch하지 않고 사용 git push하면 베어가 아닌 리포지토리에서 잘 작동합니다.

[user@foo repo]$ git fetch -v bar

[user@bar repo]$ git fetch -v foo

5

가장 쉬운 방법 : 중앙 저장소 생성 --bare(체크 아웃 된 파일 없음, .git 항목 만) 또는 github

"분산"은 다음과 같이 표시됩니다.

설정:

  1. 노트북 : git remote add desktop ssh://user@desktop/home/user/repo/path
  2. 데스크탑 : git remote add laptop ssh://user@laptop/home/user/repo/path

동기화 :

git pull laptop/desktop (push는 git이 원격 저장소로 푸시 할 때 체크 아웃 된 파일을 수정하지 않기 때문에 베어가 아닌 저장소에서 잘 작동하지 않습니다)

또는 pendrive에서 repo를 만드십시오.)


--bare repo를 사용하려고했지만 전체 워크 플로를 올바르게 가져올 수 없습니다.
Johan

나는 방금 git로 시작하고 로컬 git에서 github로 이동하고 지금까지 할 수 있지만 컴퓨터 대 컴퓨터 방법은 작동하지 않습니다. 멍청한 질문-어떤 자격 증명을 사용 user합니까? github의 경우 rsa-pub 키만 추가하면됩니다. 복제 요청자 컴퓨터에 대한 rsa-pub를 known_hosts에 추가하려고했지만 트릭을 수행하지 않았습니다 ...
Dave

이것은 지속적으로 원격 서버에 접속하지 않고 두 로컬 시스템간에 동기화하는 가장 간단한 방법입니다.
johnzachary

1

단순히 사용하는 것은 rsync어떻습니까?


3
저는 수년간 rsync를 사용하여 세 대의 서버를 동기화했습니다. 작동하지만 rsync는 동기화가 완료되면 변경 사항을 롤백하는 방법을 제공하지 않습니다. 드라이 런 출력을 충분히 읽지 않았고 rsync가 마스터에없는 파일을 삭제하도록 설정 되었기 때문에 이런 식으로 많은 파일을 잃었습니다. 나는 그 이후로 git로 옮겼고 중요한 디렉토리를 동기화 상태로 유지하는 훨씬 안전한 방법을 찾았습니다.
Cloudkiller

1

GitHub, BitBucket 또는 GitLab에 원격 저장소를 만들 수 없습니까? (후자의 두 회사는 무제한 무료 개인 저장소를 제공합니다). 직장에서 하루를 마쳤 으면을 사용 git push하여 변경 사항을 원격 저장소에 푸시하기 만하면됩니다 . 집에 도착하면 git pull변경 사항을 직장에서 가정용 컴퓨터로 가져 오십시오 . 집에서 끝나면 마찬가지로, 수행 git push및 직장에 복귀 할 때 다음을 수행합니다 git pull.


1

git 저장소를 앞뒤로 [2 대의 컴퓨터간에] 이동하는 가장 쉬운 방법은 무엇입니까?

시나리오 1 : 저는 PC1에서만 독점적으로 작업 (코드 및 파일 편집)하지만 PC2에서도 파일의 중복 사본 (예 : 전체 코드베이스 빌드)을 갖고 싶습니다.

25MB 미만의 데이터를 사용하면서 Wi-Fi 핫스팟을 통해 1 분 이내에 PC1에서 PC2로 동기화 :

나는 가지고 다니는 약한 컴퓨터 (노트북)로 작업하지만 다른 곳에있는 더 강력한 컴퓨터를 사용합니다. 나는 항상 git을 사용하여 스크립트를 사용하여 랩톱에서 다른 컴퓨터로 동기화합니다. 이 명령을 입력하여 실행합니다.

sync_git_repo_from_pc1_to_pc2

그게 다야! 휴대 전화 Wi-Fi 핫스팟을 사용하고 수십 기가 바이트 크기 저장소에서 작업하는 경우에도 일반적으로 약 25MB의 데이터와 약 30 초에서 1 분이 걸립니다 . 저는 PC2에 ssh'ed되어 있으므로 git log -1PC2에서 동기화가 작동하는지 확인한 다음 빌드 명령을 실행합니다. 완벽하게 작동합니다. 한번 시도해보세요. 자세한 내용은 아래 링크를 참조하십시오.

참고 : PC2의 복제 된 저장소는 이름이 .git 브랜치 somename_SYNC입니다. 항상 "SYNC 분기"를 사용하는 대신 동일한 분기 이름을 갖도록하려면 스크립트를 적절하게 수정하십시오. 원하는 경우 아래 시나리오 2와 유사한 효과를 얻기 위해 스크립트를 수정할 수 있습니다. 그럼에도 불구하고 Scenario 2를 수동으로 수행하는 것은 어렵지 않으므로 Scenario 2를 수동으로 계속 수행하는 것이 좋습니다. 자동화 된 스크립트가 PC1에서 "수정"이 발생하고 PC1에서 "동기화"가 실행되지만 영향을 미치는 쉽고 빠른 "수정, 동기화, 빌드"워크 플로우를 허용하므로 자동화 된 스크립트가 가장 유익하고 시간을 절약하는 시나리오 1입니다. PC2 및 "빌드"는 PC2에서 발생합니다.

연결:

  1. 전체 설정 및 설치 지침 :
    SSH를 통해 Eclipse로 원격 프로젝트에서 작업
  2. Readme, 문서 및 저장소 : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/README_git-sync_repo_from_pc1_to_pc2.md .
  3. 문제의 정확한 스크립트는 다음과 같습니다 :
    https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/sync_git_repo_from_pc1_to_pc2.sh

시나리오 2 : 여러 컴퓨터에서 작업 (코드 및 파일 편집)하고 전 세계의 모든 컴퓨터에서 동일한 코드 저장소를 편집 할 수 있기를 원합니다.

git 리포지토리가 동일하기를 원하므로 다른 컴퓨터에서하던 작업을 계속할 수 있습니다. 두 컴퓨터에 동일한 분기와 태그가 있는지 확인하고 싶습니다.

  1. https://github.com으로 이동하여 계정을 만들고 선택적으로 (권장) ssh 키를 설정합니다 .

  2. 이제 웹 인터페이스를 사용하여 새 저장소를 만듭니다.

    1. 2020 년 또는 그 이전에 GitHub는 무료 비공개 저장소 도 허용 하므로 비공개 비공개 소스 프로젝트에서도 잘 작동합니다.
  3. 새 저장소 ssh 또는 https 복제 URL을 찾으십시오. 예 : git@github.com : ElectricRCAircraftGuy / eRCaGuy_dotfiles.git 또는 https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git .

  4. 프로젝트를 PC1에 복제합니다. 전의:

     git@github.com:ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
     cd eRCaGuy_dotfiles
    
  5. 그리고 PC2에서 똑같은 복제 명령을 반복하십시오.

  6. 이제 PC1에서 변경하고 커밋 한 다음 github의 "원격"저장소로 푸시합니다.

     # edit some files, then do the following
     git add -A  # stage ("add") all changed files to be committed 
     git commit  # commit them
     git push    # push them to your remote github repo
    
  7. 이제 PC2에서 변경 사항을 가져옵니다.

     # pull all changes from github (which includes the changes
     # you just pushed from PC1) to PC2
     git pull  
    
  8. 이제 PC2에서 파일을 편집하고 커밋하고 위의 2 단계에 표시된 명령을 사용하여 github로 푸시 할 수 있으며, 그런 다음 PC1에서 실행 git pull하여 PC2에서 해당 변경 사항을 가져올 수 있습니다 .

  9. 필요에 따라이 프로세스를 계속 수행하고 PC1 또는 PC2에서 작업하고 파일을 쉽게 공유하고 두 컴퓨터간에 작업을 분할합니다. 모든 변경 사항 을 확인하고 (풀링) 다른 PC에서 계속 작업하려면 먼저 한 대의 PC에서 모든 변경 사항을 커밋하고 github푸시 해야합니다 .

  10. 두 PC간에 파일이 약간 동기화되지 않는 상황이 발생하면 추가 분기를 사용하고 병합을 수행하고 충돌을 해결하는 등의 작업을 수행해야 할 수 있습니다. 모두 동일한 저장소에서 작업하는 소규모 팀과 함께. Google은 당신의 친구입니다. Git은 매우 매우 강력하며 거의 모든 것에 대한 명령, 명령 집합 또는 워크 플로가 있습니다.


0

글쎄, 당신은 잠재적으로 설정할 수있는 서버로 푸시 앤 풀 (Git를 통해) 할 수있다. 또는 GitHub에 저장소를 저장하고이를 동기화 브리지로 사용할 수 있습니다.


0

당신은 당신의 컴퓨터에 저장소를 만들 수 있습니다. 아마도 데스크탑 일 것입니다. 그리고 랩톱과 그 자체 모두에서 그것을 푸시 / 풀할 수 있습니다.

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