이전 Windows 7 시스템(git 2.6.3.windows.1)에서 Ubuntu 16.04(git 2.7.4)의 새 시스템으로 많은 git 저장소를 전송하고 싶었습니다. 그들 모두가 원격 저장소를 가지고 있지 않았기 때문에 나는 단순히 복사하기로 결정했습니다. 이것은 작동합니다. 그러나 모든 저장소의 모든 추적 파일이 스테이지 해제되었습니다. 실제로 Repos 이전 전에 커밋되지 않은 것 중 일부가 있을 수 있지만 대부분은 커밋되었습니다.
diff
명령을 사용하여 저장소를 전송하기 전에 커밋된 파일을 살펴보면 다음과 같습니다 .
$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <[email protected]>
Date: Fri May 13 18:07:25 2016 +0300
Start
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test
이 파일이 실제로 커밋된 마지막 커밋에 대한 참조를 반환합니다. 위 예의 커밋은 저장소의 첫 번째 커밋입니다.
따라서 어떤 이유로 git은 커밋된 파일을 인식하지 않고 실제로 커밋된 마지막 커밋에 연결합니다.
다른 git 버전이나 플랫폼 또는 다른 것의 비호환성 문제입니까? 그리고 이 문제를 해결하고 리포지토리를 중단하지 않는 방법은 무엇입니까?
답변1
이것이 실제 변화입니까? git이 파일의 속성이 다르다고 불평하는 것 같습니다. 이는 확실히 다른 OS 간에 발생합니다(Windows와 Linux는 서로 다른 메타데이터를 가진 서로 다른 파일 시스템을 가지고 있기 때문입니다).
"기본" 클론을 생성하는 것은 어떻습니까?
Windows에서
다음과 같은 폴더로 이동하십시오.
cd c:\mycode
다음을 사용하여 리포지토리를 이 폴더에 로컬로 복제합니다.없는옵션을 선택하면 아무것도 체크아웃되지 않고 메타데이터만 체크아웃됩니다.
git clone --bare <path_of_your_repo>
이제 결과 폴더를 압축합니다(예:"c:\mycode\<폴더>.git") 수동으로 Linux로 전송합니다.
리눅스에서
Linux에서는 먼저 Windows에서 압축된 폴더를 복사하고 압축을 풉니다. 이제 다음과 같은 새 폴더에 복제하십시오.
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
그리고 이제 압축이 풀린 Windows 폴더를 버리고 싶다면 원본을 변경할 수 있습니다.
git remote set-url origin <new_origin>
또는 완전히 제거하십시오.
git remote rm origin
답변2
github에 푸시한 다음 우분투에서 저장소를 복제하는 것은 어떻습니까? (댓글을 달고 싶었지만 아직 담당자가 50명이 아닙니다.)
도움이 필요하시면 추가 지침을 제공해 드릴 수 있습니다.