머신 A에 git 저장소가 있습니다.
플래그를 사용하여 머신 A에서 머신 B로 rsync를 수행했습니다.
rsync -zvaP /media/shihab/development shihab@remote:/media/shihab/OSDisk/development
나중에 나는 컴퓨터 B에서 몇 가지 사항을 변경하고 동일한 플래그를 사용하여 컴퓨터 B에서 컴퓨터 A로 재동기화했습니다.
rsync -zvaP shihab@remote:/media/shihab/OSDisk/development /media/shihab/development
동기화 과정에서 수정되지 않은 파일까지 동기화되는 것을 발견했습니다. 두 번의 동기화 작업으로 인해 파일 소유자와 권한이 변경되었습니다. 저장소에서 git status를 수행하면 사용자 권한이 변경되었음을 알 수 있습니다.
이 문제를 해결하기 위해 전역 및 로컬로 git config를 변경하고 다음을 추가했습니다 core.filemode=false
.
git config --global core.fileMode false
git config --local core.fileMode false
또한 쓰기 권한을 잊어버리기 위해 rsync를 요구하는 플래그를 동기화에 추가했습니다 rsync -zvaP --no-perms --no-owner --no-group
. 예를 들어:
rsync -zvaP --no-perms --no-owner --no-group /media/shihab/development shihab@remote:/media/shihab/OSDisk/development
그러나 이러한 변경에도 불구하고 머신 B에서 머신 A로 재동기화하면 머신 B의 최신 타임스탬프가 있는 파일을 이전 타임스탬프의 파일로 덮어씁니다. 하나 만들면 볼 수 있겠네요 --dry-run -i
. 파일은 머신 B에서 다음과 같습니다.
-rwxrwxrwx 1 shihab shihab 655 2021년 11월 16일 설치-i3wm.sh*
머신 A에서는 다음과 같습니다:
-rwxrwxrwx 1 shihab shihab 681 6월 22일 11:06 install-i3wm.sh*
다음과 같이 머신 B에서 머신 A로 rsync할 때:
rsync -zvaP --dry-run -i -t --no-perms --no-owner --no-group shihab@remote:/media/shihab/OSDisk/development /media/shihab/development
나는 얻다:
f++++++++++ install-i3wm.sh
내가 뭘 잘못했나요?
답변1
그렇게 말했잖아 rsync
"최신 타임스탬프가 있는 파일을 머신 B의 이전 타임스탬프가 있는 파일로 덮어쓰고 있습니다.".
두 파일이 다르기 때문에 소스와 일치하도록 대상이 업데이트됩니다. 그게 다야 rsync
.
소스가 대상보다 최신인 경우 에만 파일을 업데이트하려는 경우 rsync
이것이 원하는 수정 동작임을 알려야 합니다. 이 경우에는 -u
( --update
)를 포함합니다.