이 답변은 현재 bash 에서이 동기화 스크립트를 작성했기 때문에 두 개의 Linux 컴퓨터 (또는 Mac에서도 작동합니까?-Mac에서는 작동하지 않음)에만 적용됩니다. 그러나 단순히 래퍼 일뿐 git
이므로 자유롭게 가져 와서 크로스 플랫폼 Python 솔루션 또는 원하는 것으로 변환하십시오.
이것은 OP의 질문에 직접 대답하지는 않지만 너무 가깝습니다.이 페이지에 방문한 다른 사람들의 질문에 답변 할 것이라고 보장합니다 ( 내가 직접 솔루션을 작성 하기 전에 여기에 왔을 때 포함 된 광산 ). 그래서 어쨌든 여기에 게시하고 있습니다.
나는 :
- 가벼운 Linux 컴퓨터에서 Eclipse와 같은 강력한 IDE를 사용하여 코드를 개발 한 다음
- 다른 더 강력한 Linux 컴퓨터에서 ssh를 통해 해당 코드를 빌드하십시오 (Eclipse 내부가 아닌 명령 행에서).
코드 "PC1"(개인용 컴퓨터 1)을 작성하는 첫 번째 컴퓨터와 코드 "PC2"를 작성하는 두 번째 컴퓨터를 호출하겠습니다. PC1에서 PC2로 쉽게 동기화 할 수있는 도구가 필요합니다. 나는 시도 rsync
했지만 큰 repos에서는 엄청나게 느리고 많은 대역폭과 데이터가 필요했습니다.
어떻게해야합니까? 어떤 워크 플로를 사용해야합니까? 이 질문도 있다면, 내가 결정한 워크 플로가 있습니다. git
github과 같은 원격 저장소를 통해 PC1에서 PC2로 변경 사항을 자동으로 푸시 하여 프로세스를 자동화하는 bash 스크립트를 작성했습니다 . 지금까지는 잘 작동하며 매우 기쁘게 생각합니다. 각 PC는 기능적인 git repo를 유지하고 전체 동기화를 수행하는 데 훨씬 적은 대역폭을 사용하기 때문에 훨씬 더 빠르며 rsync
내 의견으로는 더 신뢰할 수 있으므로 많은 데이터를 사용하지 않고도 휴대 전화 핫스팟을 통해 쉽게 수행 할 수 있습니다.
설정:
PC1에 스크립트를 설치하십시오 (이 솔루션은 ~ / bin이 $ PATH에 있다고 가정합니다).
git clone https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles.git
cd eRCaGuy_dotfiles/useful_scripts
mkdir -p ~/bin
ln -s "${PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2
cd ..
cp -i .sync_git_repo ~/.sync_git_repo
이제 방금 복사 한 "~ / .sync_git_repo"파일을 편집하고 사용자의 상황에 맞게 해당 매개 변수를 업데이트하십시오. 여기에 포함 된 매개 변수가 있습니다.
# The git repo root directory on PC2 where you are syncing your files TO; this dir must *already exist*
# and you must have *already `git clone`d* a copy of your git repo into it!
# - Do NOT use variables such as `$HOME`. Be explicit instead. This is because the variable expansion will
# happen on the local machine when what we need is the variable expansion from the remote machine. Being
# explicit instead just avoids this problem.
PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # explicitly type this out; don't use variables
PC2_SSH_USERNAME="my_username" # explicitly type this out; don't use variables
PC2_SSH_HOST="my_hostname" # explicitly type this out; don't use variables
PC1과 PC2 모두에서 동기화하려는 리포지토리를 복제하십시오.
- PC1과 PC2 모두에서 원격 리포지토리로 밀고 당길 수 있도록 ssh 키가 모두 설정되어 있는지 확인하십시오. 유용한 링크는 다음과 같습니다.
- https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
- https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
- ssh 키가 모두 PC1에서 PC2로 ssh로 설정되어 있는지 확인하십시오.
이제 cd
PC1의 git repo 내의 디렉토리로 이동하여 다음을 실행하십시오.
sync_git_repo_from_pc1_to_pc2
그게 다야! 약 30 초 후에 모든 것이 PC1에서 PC2로 마술처럼 동기화되며, 디스크의 어느 컴퓨터에서 어떤 일을하고 있는지, 어디에서 무엇을하고 있는지를 알려주는 출력물이 계속 출력됩니다. 커밋되지 않은 것을 덮어 쓰거나 삭제하지 않기 때문에 안전합니다. 대신 먼저 백업합니다! 작동 방식은 아래를 참조하십시오.
이 스크립트가 사용하는 프로세스는 다음과 같습니다 (예 : 실제로 수행중인 작업).
- PC1에서 : 커밋되지 않은 변경 사항이 PC1에 있는지 확인합니다. 그렇다면 현재 분기에서 임시 커밋을 커밋합니다. 그런 다음 원격 SYNC 분기로 강제 푸시합니다. 그런 다음 로컬 브랜치에서 수행 한 임시 커밋을 커밋 해제 한 다음 스크립트를 호출 할 때 이전에 준비된 파일을 준비하여 로컬 git repo를 정확히 상태로 되돌립니다. 다음으로,
rsync
스크립트를 PC2로 복사하고 PC2 ssh
에게 PC2 작업을 수행하는 특별한 옵션으로 스크립트를 실행하도록 PC2에 지시 하는 호출을 수행합니다.
- PC2의 기능은 다음과 같습니다
cd
. 리포지토리에 저장하고 커밋되지 않은 로컬 변경 사항이 있는지 확인 합니다. 이 경우 현재 분기에서 분기 된 새 백업 분기 (샘플 이름 : my_branch_SYNC_BAK_20200220-0028hrs-15sec
<-YYYYMMDD-HHMMhrs--SSsec)를 만들고 DO BACKUP OF ALL 과 같은 커밋 메시지를 사용하여 해당 분기에 커밋되지 않은 변경 사항을 커밋합니다. PC2에서 커밋되지 않은 변경 사항 (대상 PC / 빌드 머신). 이제 SYNC 분기를 체크 아웃하여 로컬 시스템에없는 경우 원격 저장소에서 가져옵니다. 그런 다음 원격 리포지토리에서 최신 변경 내용을 가져오고 로컬 SYNC 리포지토리가 원격 SYNC 리포지토리와 일치하도록 강제 재설정합니다. 이것을 "하드 풀"이라고 부를 수 있습니다. 그러나 PC2에서 로컬로 수행 한 커밋되지 않은 변경 사항을 이미 백업했기 때문에 안전합니다.
- 그게 다야! 스크립트가 모든 자동 커밋 및 작업을 처리하므로 깨끗한 작업 디렉토리를 보장하지 않고도 PC1에서 PC2로 완벽한 사본을 만들었습니다! 빠르며 거대한 리포지토리에서 매우 잘 작동합니다. 이제 저장소가 수십 기가 바이트이고 시간이 있더라도 필요한 경우 휴대 전화의 wifi 핫스팟을 통해 다른 컴퓨터에서 쉽게 빌드하거나 테스트하는 동안 한 컴퓨터에서 선택한 IDE 를 쉽게 사용할 수 있습니다. 그리고 자원이 제한되어 있습니다.
자원:
- 전체 프로젝트 : https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
- 이 프로젝트 내의 소스 코드 자체에서 더 많은 링크와 참조를보십시오.
- "하드 풀"을 호출하는 방법 : "git pull"을 사용하여 로컬 파일을 덮어 쓰려면 어떻게합니까?
관련 :
- 움직일 때 컴퓨터간에 git repository 동기화?