GIT โคลน repo ข้ามระบบไฟล์ในเครื่องใน windows


200

ฉันเป็น Noob ที่สมบูรณ์เมื่อพูดถึง GIT ฉันเพิ่งทำตามขั้นตอนแรกในช่วงไม่กี่วันที่ผ่านมา ฉันตั้งค่า repo บนแล็ปท็อปของฉันดึง Trunk จากโครงการ 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

ฉันจะแชร์ที่เก็บข้อมูลระหว่างสองเครื่องด้วยวิธีที่ง่ายที่สุดได้อย่างไร

จะมีสถานที่อื่น ๆ ที่จะเป็นจุดจัดเก็บข้อมูลอย่างเป็นทางการและสถานที่ที่ devs อื่น ๆ และเซิร์ฟเวอร์ CI ฯลฯ จะดึงมานี่เป็นเพียงเพื่อให้ฉันสามารถทำงานกับ repo เดียวกันในสองเครื่อง

ตามคำแนะนำของ 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

มันใช้งานได้ดีมาก

ขอบคุณ


ไฟล์: //192.168.10.51/code โดยไม่มีค่าเฉลี่ยที่ถูกต้อง URI ชี้ไปที่ไฟล์ในขณะที่ file: // C: \ foo \ bar.txt มี
เกรกอรี่ Pakosz

จากนั้นฉันจะชี้ไปที่เครื่องระยะไกลด้วยการอ้างอิงดังกล่าวได้อย่างไร
Jon

คุณอาจต้องการแมปไดรฟ์เครือข่าย
Josh Lee

ทำงานได้สำหรับฉัน - โปรดทราบว่านี่เป็นเฉพาะกับ windows และจะไม่ทำงานจาก bash git ใน windows - จำเป็นต้องใช้ cmd หรือ powershell
Dave Rael

ยังลองใช้แบบ cmd แต่มันไม่ทำงาน และอะไรคือ "รหัส" ใน "ไฟล์ git clone: ​​// \\\\ 192.168.0.51 \ code" หมายถึงอะไร ฉันแทนที่ด้วย "C: / UniserverZ / www / sampleProject /" และมันไม่ทำงาน มันบอกว่ามันไม่ใช่ที่เก็บคอมไพล์
boi_echos

คำตอบ:


177

คุณสามารถระบุ URL ของรีโมตได้โดยใช้พา ธUNCกับโปรโตคอลไฟล์ สิ่งนี้ต้องการให้คุณใช้สี่สแลช:

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
ใช่นี่เป็นวิธีที่ดีที่สุดที่จะทำใน windows
Nicholas DiP Piazza

3
เราสามารถใช้โพรโทคอล: //// ผู้ใช้: รหัสผ่าน @ โฮสต์:สัญกรณ์พอร์ต / เส้นทางตัวอย่างเช่น: ไฟล์: /// ผู้ใช้: password@192.168.10.51/code
pistache

1
@OderWat ยกเว้นว่าการใช้localhostจะไม่ช่วยคุณเมื่อพยายามเข้าถึงคอมพิวเตอร์เครื่องอื่นซึ่งเป็นคำถามที่เกี่ยวกับ หากคุณต้องการที่จะเข้าถึงท้องถิ่นพื้นที่เก็บข้อมูลเช่นที่มีอยู่ในประเทศในระบบแฟ้มของคุณคุณก็สามารถใช้เส้นทางภายในโดยไม่ต้องใช้โปรโตคอลไฟล์ ...
โผล่

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

คำสั่งดังกล่าวใช้เครื่องหมายพา ธ POSIX สำหรับไดเรกทอรีที่มีที่เก็บ git ของคุณ สำหรับ 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: \ Path บางอัน \ มีช่องว่าง" my_project
Sebastian Patten

1
ความช่วยเหลือที่ดี สิ่งนี้ใช้ได้กับฉันในเครื่อง windows 7 ของฉัน <จากคำสั่ง git bash prompt> สิ่งที่ต้องการ: ไฟล์ git clone: ​​/// C: / ผู้ใช้ / ชื่อผู้ใช้ / ชื่อผู้ใช้ repsitoryName
Forhad

คุณอาจจะต้องการตั้งค่ารีโมทหลังจากนั้นมิฉะนั้นมันจะชี้ไปยังพื้นที่อื่น ๆ ของคุณเป็นจุดกำเนิดซึ่งฉันพบว่ามีข้อผิดพลาดมาก ใช้ git จากระยะไกล -v; git กำเนิด rm ระยะไกล; คอมไพล์กำเนิดเพิ่ม <repo อยู่> (ซึ่งคุณสามารถคัดลอกหลังจากทำคอมไพล์ระยะไกล -V ใน repo ท้องถิ่นเดิม)
Hanan

ถูกต้องคุณไม่จำเป็นต้องใช้รูปแบบ URL เช่นไฟล์: //// คุณสามารถโคลนไดเรกทอรีได้
Peter N. Steinmetz

14

คำตอบที่มีชื่อโฮสต์ไม่ทำงานสำหรับฉัน แต่สิ่งนี้ทำ:

ไฟล์ git clone: ​​////home/git/repositories/MyProject.git/


1
ดูเหมือนว่าคุณมีเครื่องหมายสแลชมากเกินไปหลังจาก "ไฟล์:" สำหรับฉันหมายเลขเวทย์มนตร์เป็น 3 สแลช
Mark F Guerra

แปลก. สี่ขีดทำให้ฉันมีข้อผิดพลาดร้ายแรง ใช้งานได้เฉพาะกับฉันสามคนเท่านั้น
Big McLargeHuge

4
เคล็ดลับของฉันในการหาไวยากรณ์ที่ใช้งานได้คือการสร้างไฟล์ txt ในโฟลเดอร์และลากเพื่อเปิดในเบราว์เซอร์ URL ที่ถูกต้องสำหรับไฟล์จะปรากฏขึ้น
AnneTheAgile

7

ฉันประสบความสำเร็จในการทำเช่นนี้โดยใช้ไฟล์: // แต่มีเครื่องหมายทับเพิ่มเติมหนึ่งอันเพื่อแสดงถึงพา ธ สัมบูรณ์

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

ในกรณีของฉันฉันใช้ Git บน Cygwin สำหรับ Windows ซึ่งคุณสามารถเห็นได้เนื่องจากส่วน / cygdrive / c ในเส้นทางของฉัน ด้วยการปรับแต่งบางอย่างไปยังเส้นทางมันควรจะทำงานกับการติดตั้งคอมไพล์

การเพิ่มรีโมตทำงานในลักษณะเดียวกัน

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

6

อาจแมปแชร์เป็นไดรฟ์เครือข่ายแล้วทำ

git clone Z:\

ส่วนใหญ่เป็นเพียงการเดา ฉันมักจะทำสิ่งนี้โดยใช้ ssh การทำตามคำแนะนำนั้นจะทำให้คุณต้องทำการแมปไดรฟ์ทุกครั้งที่คุณกด / ดึงเข้า / ออกจากแล็ปท็อป ฉันไม่แน่ใจว่าคุณจะควบคุมการทำงานของ windows ได้อย่างไร แต่ถ้าคุณกำลังทำสิ่งนี้มากมันอาจคุ้มค่าที่จะตรวจสอบ


@Carlos: ฉันคิดว่ามันจะทำงานได้ก็ต่อเมื่อคุณไม่ได้cdไปที่ไดเรคทอรีอื่นในZ:ไดรฟ์ IIRC; ฉันไม่ได้เป็นผู้ใช้ Windows มาระยะหนึ่งแล้ว นอกจากนี้อาจเป็นไปได้ว่าgitการตีความตัวอักษรไดรฟ์แตกต่างจากการประชุม Windows มาตรฐาน คุณลอง "Z:" แล้วหรือยัง
intuited

errr ... ที่ควรอ่าน "คุณลองใช้` Z: \ `?" ดียกเว้นการหลบหนีที่ถูกต้องเพื่อให้โหมดโค้ดเปิดใช้งาน .. #nurrrr .. ฉันเดาว่าไม่ได้
intuited

3

ไม่แน่ใจว่าเป็นเพราะรุ่น git ของฉัน (1.7.2) หรืออะไร แต่วิธีการที่กล่าวข้างต้นโดยใช้ชื่อเครื่องและตัวเลือก IP ไม่ทำงานสำหรับฉัน รายละเอียดเพิ่มเติมที่อาจ / ไม่สำคัญคือ repo นั้นเป็น repo เปล่าที่ฉันได้ทำการ initialize และผลักไปจากเครื่องอื่น

ฉันพยายามโคลน 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.

หมายเหตุ - แม้ว่า repo ที่ถูกโคลนนิ่งนั้นจะเปลือยเปล่าสิ่งนี้ก็สร้างโคลน 'ปกติ' ที่มีไฟล์รหัส / รูปภาพ / ทรัพยากรจริงทั้งหมดที่ฉันหวังไว้ (ตรงข้ามกับภายในของ git repo)


1

ป้อนพา ธ สัมบูรณ์หรือพา ธ สัมพัทธ์

ตัวอย่างเช่นอันแรกด้านล่างใช้เส้นทางที่แน่นอน:

(นี่คือจากภายในโฟลเดอร์ที่มีที่เก็บและการสำรองข้อมูลเป็นโฟลเดอร์ย่อยนอกจากนี้โปรดจำไว้ว่าโฟลเดอร์การสำรองข้อมูลจะไม่ถูกแก้ไขหากมีสิ่งใดอยู่แล้วและหากไม่มีอยู่โฟลเดอร์ใหม่จะถูกสร้างขึ้น)

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

ต่อไปนี้ใช้เส้นทางสัมพัทธ์:

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

0

ในขณะที่รองรับเส้นทาง UNC ตั้งแต่ Git 2.21 (ก.พ. 2019 ดูด้านล่าง) Git 2.24 (Q4 2019)

git clone file://192.168.10.51/code

ไม่มากfile:////xxx' file://' ก็เพียงพอที่จะอ้างถึงการแชร์พา ธ ของ UNC
ดู " ข้อผิดพลาดในการดึงข้อมูล Git ด้วย UNC "


หมายเหตุตั้งแต่ปี 2559 และMingW-64 ที่ git.exeบรรจุด้วยGit สำหรับ Windowsจึงสนับสนุนเส้นทาง UNC
(โปรดดู " msys, msys2 และ MinGW-64 เกี่ยวข้องกันอย่างไร ")

และด้วย Git 2.21 (ก.พ. 2019) การสนับสนุนนี้ขยายออกไปถึงแม้ในเชลล์msys2 (พร้อมเครื่องหมายคำพูดรอบเส้นทาง UNC)

ดูกระทำ 9e9da23 , กระทำ 5440df4 (17 มกราคม 2019) โดยโยฮันเน Schindelin (dscho )
ช่วยโดย: คิม Gybels (Jeff-G )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ f5dd919 , 5 กุมภาพันธ์ 2019)

ก่อน Git 2.21 เนื่องจากการเล่นโวหารในวิธีการของ Git ในการวางไข่git-upload-packมีปัญหาเมื่อผ่านเส้นทางที่มีแบ็กสแลชอยู่: Git จะบังคับให้บรรทัดคำสั่งผ่านเชลล์ซึ่งมีความหมายที่แตกต่างกันใน Git สำหรับ Windows (เป็น MSYS2 โปรแกรม) กว่าโปรแกรม Win32 ทั่วไปเช่นgit.exeตัวมันเอง

อาการเป็นที่แรกของทั้งสอง backslashes ในเส้นทาง UNC ของรูปแบบ\\myserver\folder\repository.gitจะถูกถอด

นี่คือการลดลงในขณะนี้:

mingw: อาร์กิวเมนต์กรณีพิเศษเป็น sh

รันไทม์ MSYS2 นั้นดีที่สุดในการเลียนแบบการขยายตัวของบรรทัดคำสั่งและการยกเลิกข้อความซึ่งจะดำเนินการโดยการเรียก Unix shell บนระบบ Unix

กฎการอ้างอิงเชลล์ Unix เหล่านั้นแตกต่างจากกฎการอ้างอิงที่ใช้กับ Windows 'cmd และ Powershell ทำให้อึดอัดใจเล็กน้อยที่จะพูดพารามิเตอร์บรรทัดคำสั่งอย่างถูกต้องเมื่อวางไข่กระบวนการอื่น ๆ

โดยเฉพาะอย่างยิ่งgit.exeส่งผ่านข้อโต้แย้งไปยังกระบวนการย่อยที่ไม่ได้มีวัตถุประสงค์เพื่อตีความเป็นสัญลักษณ์แทนและหากมีเครื่องหมายแบ็กสแลชจะไม่ถูกตีความว่าเป็นอักขระยกเว้นเช่นเมื่อผ่านเส้นทาง Windows

หมายเหตุ: นี่เป็นปัญหาเมื่อเรียกใช้ไฟล์เรียกทำงาน MSYS2 เท่านั้นไม่ใช่เมื่อเรียกใช้ไฟล์เรียกทำงาน MINGW เช่น git.exe อย่างไรก็ตามเราเรียกใช้งาน MSYS2 บ่อยครั้งที่สุดโดยเฉพาะอย่างยิ่งเมื่อตั้งค่าuse_shellสถานะในโครงสร้าง child_process

ไม่มีวิธีที่สวยงามในการพิจารณาว่า.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 และไฟล์ config

สำหรับค่าชุด URL ต้นทางแบบรีโมต:

[remote "origin"]
    url = file:///C:/Documentation/git_server/kurmisoftware
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.