ฉันกำลังเพิ่มคำตอบนี้เพราะหลังจากมาถึงที่นี่ (มีคำถามเดียวกัน) ไม่มีคำตอบใดที่อธิบายถึงขั้นตอนที่จำเป็นทั้งหมดที่ต้องดำเนินการจากสิ่งใดไปยัง repo ทางไกล (เปล่า) ที่ใช้งานได้อย่างสมบูรณ์
หมายเหตุ: ตัวอย่างนี้ใช้เส้นทางท้องถิ่นสำหรับตำแหน่งของ repo เปล่า แต่โปรโตคอล git อื่น ๆ (เช่น SSH ที่ระบุโดย OP) ควรใช้งานได้ดี
ฉันพยายามที่จะเพิ่มบันทึกย่อตามวิธีการสำหรับผู้ที่ไม่คุ้นเคยกับคอมไพล์
1. เริ่มต้น repo เปล่า ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
สิ่งนี้จะสร้างโฟลเดอร์ (repo.git) และเติมด้วยไฟล์ git ที่เป็น repo git มันยืน, repo นี้ไม่มีประโยชน์ - มันไม่เคยมีใครกระทำและที่สำคัญไม่มีสาขา แม้ว่าคุณสามารถคัดลอก repo นี้ได้ แต่คุณไม่สามารถดึงมันได้
ต่อไปเราต้องสร้างโฟลเดอร์ทำงาน มีสองวิธีในการทำเช่นนี้ขึ้นอยู่กับว่าคุณมีไฟล์อยู่หรือไม่
2a สร้างโฟลเดอร์การทำงานใหม่ (ไม่มีไฟล์ที่มีอยู่) โดยการคัดลอก repo ที่ว่างเปล่า
git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.
คำสั่งนี้จะใช้งานได้หาก/path/to/workไม่มีอยู่หรือเป็นโฟลเดอร์ว่าง จดบันทึกคำเตือน - ในขั้นตอนนี้คุณยังไม่มีประโยชน์ใด ๆ หากคุณcd /path/to/workและวิ่งgit statusคุณจะได้รับสิ่งที่ชอบ:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
แต่นี่เป็นเรื่องโกหก คุณไม่ได้อยู่ในสาขาจริงๆmaster(เพราะgit branchไม่มีอะไรคืน) และจนถึงตอนนี้ก็ไม่มีข้อผูกมัดใด ๆ
จากนั้นคัดลอก / ย้าย / สร้างไฟล์บางไฟล์ในโฟลเดอร์ทำงานเพิ่มไปยังคอมไพล์และสร้างการคอมมิทครั้งแรก
> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
git configคำสั่งที่มีความจำเป็นเท่านั้น Git ถ้าคุณยังไม่ได้บอกแล้วว่าคุณเป็นใคร โปรดทราบว่าถ้าคุณเรียกใช้ตอนนี้git branchคุณจะเห็นmasterสาขาที่ระบุ ตอนนี้ทำงานgit status:
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
นี่เป็นสิ่งที่ทำให้เข้าใจผิด - ต้นน้ำไม่ได้ "หายไป" แต่ยังไม่ได้สร้างและgit branch --unset-upstreamจะไม่ช่วย แต่ก็ไม่เป็นไรตอนนี้เรามีความมุ่งมั่นครั้งแรกของเราเราสามารถผลักดันและต้นแบบจะถูกสร้างขึ้นบน repo เปลือย
> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
ณ จุดนี้เรามี repo เปลือยที่ใช้งานได้อย่างสมบูรณ์ซึ่งสามารถโคลนได้ที่อื่นในสาขาหลักเช่นเดียวกับสำเนาทำงานท้องถิ่นซึ่งสามารถดึงและดัน
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2b สร้างโฟลเดอร์ที่ใช้งานได้จากไฟล์ที่มีอยู่
หากคุณมีโฟลเดอร์ที่มีไฟล์อยู่แล้ว (ดังนั้นคุณจึงไม่สามารถคัดลอกได้) คุณสามารถเริ่มต้น repo git ใหม่เพิ่มคอมมิชชันแรกแล้วเชื่อมโยงไปยัง repo เปล่าหลังจากนั้น
> cd /path/to/work_with_stuff
> git init
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"
[master (root-commit) 614ab02] added stuff
20 files changed, 1431 insertions(+)
create mode 100644 stuff.txt
...
ณ จุดนี้เรามีความมุ่งมั่นและสาขาหลักในท้องถิ่นซึ่งเราต้องเปลี่ยนเป็นสาขาอัปสตรีมที่ติดตามระยะไกล
> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
สังเกตการ-uตั้งค่าสถานะบน git push เพื่อตั้งค่า (ใหม่) สาขาอัปสตรีมที่ติดตาม เหมือนก่อนหน้านี้ตอนนี้เรามี repo เปลือยที่ใช้งานได้อย่างสมบูรณ์ซึ่งสามารถโคลนได้ที่อื่นในสาขาหลักเช่นเดียวกับสำเนาการทำงานในท้องถิ่นที่สามารถดึงและดัน
ทั้งหมดนี้อาจดูเหมือนชัดเจนสำหรับบางคน แต่คอมไพล์สร้างความสับสนให้ฉันในเวลาที่ดีที่สุด (เป็นข้อผิดพลาดและข้อความสถานะต้องมีการทำใหม่) - หวังว่าสิ่งนี้จะช่วยผู้อื่นได้
--sharedตัวเลือกสำหรับinitถ้าคุณวางแผนที่จะให้คนอื่นผลักดันไปยัง repo นี้ มันจะเพิ่มการอนุญาตให้เขียนเป็นกลุ่มในที่เก็บ - ลิงค์