Windows의 로컬 파일 시스템에서 GIT 복제 저장소


200

GIT에 관해서는 완전한 Noob입니다. 지난 며칠 동안 첫 발걸음을 내딛었습니다. 랩톱에 저장소를 설정하고 SVN 프로젝트에서 트렁크를 가져 왔습니다 (지점에 문제가 있었지만 작동하지 않음).

이제 랩탑에서 메인 데스크탑으로 당기거나 밀어 낼 수 있기를 원합니다. 노트북을 사용하는 이유는 하루에 2 시간 씩 여행하면서 기차에서 편리하며 좋은 일을 할 수 있습니다. 그러나 집에있는 메인 머신은 개발하기에 좋습니다. 집에 도착했을 때 랩탑에서 메인 컴퓨터로 밀거나 당길 수 있기를 원합니다. 이 작업을 수행하는 가장 간단한 방법은 LAN을 통해 코드 폴더를 공유하고 수행하는 것입니다.

git clone file://192.168.10.51/code

불행히도 이것은 나를 위해 작동하지 않는 것 같습니다 :

그래서 git bash cmd를 열고 위의 명령을 입력하면 C : \ code (두 컴퓨터의 공유 폴더)에 있습니다.

Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

가장 간단한 방법으로 두 컴퓨터간에 저장소를 공유하는 방법

공식 저장소 지점이 될 다른 위치와 다른 개발자 및 CI 서버 등이 가져올 장소가 있습니다. 이것은 두 컴퓨터에서 동일한 리포지토리에서 작업 할 수 있도록하기위한 것입니다.

Sebastian의 제안에 따라 다음을 얻습니다.

C:\code>git clone --no-hardlinks file://192.168.10.51/code
Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

** 편집-답변 **

도움이 된 모든 덕분에. 나는 드라이브 매핑을 시도했지만 작동했지만 매핑하지 않고 다시 시도 할 것이라고 생각했습니다. 최종 결과는 다음과 같습니다.

git clone file://\\\\192.168.0.51\code

이것은 훌륭하게 작동했습니다.

감사


file : //192.168.10.51/code는 파일을 가리키는 유효한 URI가 아니며, file : // C : \ foo \ bar.txt는
Gregory Pakosz

그런 다음 그러한 참조로 원격 시스템을 어떻게 가리킬 수 있습니까?
Jon

네트워크 드라이브를 매핑하고 싶을 것입니다.
Josh Lee

나를 위해 일했습니다-이것은 Windows에만 해당되며 Windows의 git bash에서는 작동하지 않습니다-cmd 또는 powershell을 사용해야합니다
Dave Rael

또한 cmd에서 시도했지만 작동하지 않았습니다. 또한 "git clone file : // \\\\ 192.168.0.51 \ code"에서 "code"란 무엇입니까? "C : / UniserverZ / www / sampleProject /"로 바꾸었고 작동하지 않았습니다. 그것은 말했다는 아닌 자식 저장소
boi_echos

답변:


177

파일 프로토콜에 UNC 경로를 적용하여 원격 URL을 지정할 수 있습니다 . 이를 위해서는 네 개의 슬래시를 사용해야합니다.

git clone file:////<host>/<share>/<path>

예를 들어, 기본 머신에 IP 192.168.10.51 및 컴퓨터 이름 main이 있고 공유 이름 code이 git 저장소 인 공유 가있는 경우 다음 명령 모두 동일하게 작동해야합니다.

git clone file:////main/code
git clone file:////192.168.10.51/code

Git 저장소가 서브 디렉토리에있는 경우 다음 경로를 추가하십시오.

git clone file:////main/code/project-repository
git clone file:////192.168.10.51/code/project-repository

2
해당 체계로 인증하는 방법 (예 : 사용자 이름 / 암호)이 있습니까?
intuited

1
@majgis Windows를 거의 사용하므로 솔루션이 Windows에서 작동합니다.
찌를

1
그래, 이것은 창문에서 그것을하는 가장 좋은 방법입니다.
Nicholas DiPiazza

3
또한 다음과 같이 protocol : //// user : password @ host : port / path 표기법을 사용할 수 있습니다 . file : /// user : password@192.168.10.51/code
pistache

1
@OderWat localhost 를 사용 하면 다른 컴퓨터에 액세스하려고 할 때 전혀 도움이되지 않습니다. 파일 시스템에 로컬로 존재 하는 로컬 리포지토리 에 액세스 하려면 파일 프로토콜을 사용하지 않고 로컬 경로 만 사용할 수 있습니다…
poke

125
$ git clone --no-hardlinks /path/to/repo

위의 명령은 git 저장소가있는 디렉토리에 POSIX 경로 표기법을 사용합니다. Windows의 경우 디렉토리 C:/path/to/repo.git디렉토리입니다.

C:\some\dir\> git clone --local file:///C:/path/to/repo my_project

저장소가에 복제됩니다 C:\some\dir\my_project. file:///부품을 생략하면 --local옵션이 내포됩니다.


7
이것은 공백이있는 파일 경로에 대해 나를 위해 일했습니다 : git clone -l file : // "C : \ SOME PATH \ WITH SPACES"my_project
Sebastian Patten

1
큰 도움이됩니다. 이것은 내 Windows 7 컴퓨터에서 나를 위해 작동합니다. <git bash 명령 프롬프트에서> 같은 것 : git clone file : /// C : / Users / username / repsitoryName
Forhad

나중에 리모컨을 설정하고 싶을 것입니다. 그렇지 않으면 슈퍼 오류가 발생하기 쉬운 원산지로 다른 로컬을 가리 킵니다. git remote 사용 -v; git remote rm origin; git add origin <repo-address> (원본 로컬 저장소에서 git remote -v를 수행 한 후 복사 할 수 있음)
Hanan

이것은 정확합니다. file : ////와 같은 URL 양식을 사용할 필요가 없으며 디렉토리를 복제하면됩니다.
Peter N. Steinmetz

14

호스트 이름이있는 대답은 효과가 없었지만 이것은 효과가있었습니다.

git clone file : ////home/git/repositories/MyProject.git/


1
"file :"다음에 슬래시가 너무 많은 것 같습니다. 저에게있어 매직 넘버는 3 번입니다
Mark F Guerra

기묘한. 4 개의 슬래시로 인해 치명적인 오류가 발생했습니다. 세 가지로만 작동했습니다.
Big McLargeHuge

4
작동하는 구문을 알아내는 나의 속임수는 폴더에 txt 파일을 만들고 끌어서 브라우저에서 여는 것입니다. 파일의 올바른 URL이 나타납니다.
AnneTheAgile

7

file : //를 사용 하여이 작업을 성공적으로 수행했지만 절대 경로를 나타내는 슬래시가 하나 더 있습니다.

git clone file:///cygdrive/c/path/to/repository/

필자의 경우 Windows 용 Cygwin에서 Git을 사용하고 있는데 경로의 / cygdrive / c 부분으로 인해 볼 수 있습니다. 경로를 약간 조정하면 모든 git 설치와 함께 작동해야합니다.

리모컨 추가는 같은 방식으로 작동합니다

git remote add remotename file:///cygdrive/c/path/to/repository/

6

공유를 네트워크 드라이브로 매핑 한 다음

git clone Z:\

대부분 추측 일뿐입니다. 나는 항상 ssh를 사용 하여이 일을합니다. 물론이 제안을 따르면 랩톱을 밀거나 당길 때마다 해당 드라이브를 매핑해야합니다. 창문 아래에서 작동하도록 ssh를 어떻게 조작하는지 잘 모르겠지만이 작업을 많이 수행하려면 조사 할 가치가 있습니다.


@Carlos : 드라이브의 cd다른 디렉토리에 있지 않은 경우에만 작동한다고 생각합니다 Z:. IIRC; 나는 꽤 오랫동안 윈도우 사용자가 아니었다. 또한 git드라이브 문자를 표준 Windows 규칙과 다르게 해석 할 수도 있습니다 . `Z :`를 사용해 보셨습니까?
직관

errr ... "Z : \`? 글쎄, 올바른 탈출을 제외하고 코드 모드가 활성화됩니다 .. #nurrrr .. 어쨌든 그렇지 않습니다.
intuited

3

내 자식 버전 (1.7.2) 때문인지 확실하지 않지만 머신 이름과 IP 옵션을 사용하여 위에 나열된 접근 방식이 작동하지 않습니다. 중요하지 않을 수도있는 추가 세부 사항은 리포지토리가 초기화되어 다른 시스템에서 푸시 한 베어 리포지토리라는 것입니다.

위와 같은 명령으로 위에서 설명한대로 project1을 복제하려고했습니다.

$ git clone file:////<IP_ADDRESS>/home/user/git/project1
Cloning into project1...
fatal: '//<IP_ADDRESS>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git clone file:////<MACHINE_NAME>/home/user/git/project1
Cloning into project1...
fatal: '//<MACHINE_NAME>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

무엇을 했던 나를 위해 작업하는 것은 간단한 일이었다 :

$ git clone ../git/project1
Cloning into project1...
done.

참고-복제 된 리포지토리가 베어졌지만 (git repo의 내부와 달리) 내가 기대했던 모든 실제 코드 / 이미지 / 리소스 파일이있는 '정상'클론이 생성되었습니다.


1

절대 경로 또는 상대 경로를 입력하십시오.

예를 들어 아래 첫 번째 경로는 절대 경로를 사용합니다.

(이것은 리포지토리와 하위 폴더로 백업을 포함하는 폴더 내부에 있습니다. 또한 백업 폴더가 이미 포함되어 있으면 수정되지 않으며 새 폴더가 없으면 새 폴더가 생성됩니다)

~/git$ git clone --no-hardlinks ~/git/git_test1/   ~/git/bkp_repos/

다음은 상대 경로를 사용합니다.

~/git$ git clone --no-hardlinks git_test1/   bkp_repos2/

0

Git 2.21 (2019 년 2 월, 아래 참조) 이후 UNC 경로가 지원되지만 Git 2.24 (Q4 2019)는

git clone file://192.168.10.51/code

더 이상 file:////xxx' file://'은 (는) UNC 경로 공유를 참조하기에 충분합니다.
" UNC의 Git Fetch 오류 "를 참조하십시오 .


2016 년부터 Windows 용 Git 과 함께 패키지 된 MingW-64 부터 UNC 경로가 지원됩니다. ( " msys, msys2 및 MinGW-64는 서로 어떻게 관련되어 있습니까? ")git.exe

그리고 Git 2.21 (2019 년 2 월)에서이 지원은 msys2 셸 (UNC 경로 주위에 따옴표 포함 )에서도 확장 됩니다.

Johannes Schindelin ( )의 commit 9e9da23 , commit 5440df4 (2019 년 1 월 17 일)를 참조하십시오 . 도움 : Kim Gybels ( ) . (의해 병합 - Junio C 하마노 -f5dd919 커밋 2,019 05 이월)dscho
Jeff-G
gitster

Git 2.21 이전에는 Git의 스폰 방법으로 인해 git-upload-pack백 슬래시가있는 경로를 전달할 때 문제가 발생합니다. git.exe자체) 와 같은 일반 Win32 실행 파일보다

증상은 UNC 경로의 두 백 슬래시 중 첫 번째 백 슬래시 중 첫 번째 \\myserver\folder\repository.git제거 된 것 입니다.

이것은 지금 완화됩니다 :

mingw : 특별한 경우에 대한 인수 sh

MSYS2 런타임은 Unix 시스템에서 호출하는 Unix 쉘에 의해 수행되는 명령 줄 와일드 카드 확장 및 인용을 에뮬레이트하기 위해 최선을 다합니다.

이러한 유닉스 쉘 인용 규칙은 Windows의 cmd 및 Powershell에 적용되는 인용 규칙과 다르기 때문에 다른 프로세스를 생성 할 때 명령 줄 매개 변수를 올바르게 인용하기가 약간 어색합니다.

특히, 와일드 카드로 해석 되지 않는git.exe 서브 프로세스에 인수를 전달 하고 백 슬래시를 포함하는 경우, Windows 경로를 전달할 때 이스케이프 문자로 해석되지 않아야합니다.

참고 : 이것은 git.exe와 같은 MINGW 실행 파일을 호출 할 때가 아니라 MSYS2 실행 파일을 호출 할 때만 발생합니다. 그러나 use_shellchild_process 구조에서 플래그를 설정할 때 MSYS2 실행 파일을 자주 호출 합니다.

.exe실행할 파일이 MSYS2 프로그램인지 MINGW 파일 인지 판별 할 수있는 우아한 방법은 없습니다 .
그러나 셸을 통해 명령 줄을 전달하는 유스 케이스가 널리 보급되어 있기 때문에 최소한 실행할 때이 문제를 해결해야합니다 sh.exe.

argv[0]" sh"인지 여부와 MSYS2 Bash를 참조하는지 여부에 대한 추악하고 하드 코딩 된 테스트를 소개하여 일반적인 인수와 다른 인수를 인용해야하는지 여부를 결정합니다.

그래도 문제가 완전히 해결되지는 않지만 최소한 문제입니다.

또한 프로세스 git clone \\server\repo경로를 전달할 때 백 슬래시를 잘못 처리하여 실패한 문제도 해결합니다 git-upload-pack.

또한 공백과 백 슬래시뿐만 아니라 중괄호도 인용해야합니다.
별명은 종종 MSYS2 Bash를 거치고 별명은과 같은 매개 변수를 얻는 경우가 많으므로 HEAD@{yesterday}실제로 중요합니다.

보다 t/t5580-clone-push-unc.sh


0

복제 후 나에게 푸시가 작동하지 않았습니다.

솔루션 : repo가 ​​복제 된 경우 .git 폴더 및 구성 파일을여십시오.

원격 원점 URL 설정 값 :

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.