ฉันจะกดเริ่มต้นไปยังที่เก็บระยะไกลด้วย Git ได้อย่างไร


173

ฉันได้อ่านบทช่วยสอนที่นับไม่ถ้วนและฉันก็เข้ามาใกล้ นี่คือสิ่งที่ฉันได้รับ:

- ฉันใช้ RubyMine บนเดสก์ท็อป Windows ของฉัน
- ฉันได้ติดตั้ง Git ในบัญชีโฮสติ้ง WebFaction ตามคำแนะนำแล้ว
- ดูเหมือนว่า Git จะทำงานได้ดีบนทั้งสองเครื่อง

นี่คือสิ่งที่ผมกำลังทำ:
1. บนเครื่องเซิร์ฟเวอร์:
         mkdir โครงการ
         b. git init
         c. คอมไพล์เพิ่ม
         d คอมไพล์กระทำ <--- "ไม่มีอะไรที่จะกระทำ"
2. ในลูกค้า:
         สร้างโครงการใหม่ใน RubyMine
         ข "git init" ในไดเรกทอรีบนสุดของโครงการ
         c "ผลักดันการเปลี่ยนแปลง" ไปยังเซิร์ฟเวอร์ <---- "ไม่สามารถส่งการอ้างอิงถึง ... "

ฉันพลาดขั้นตอนอะไรบ้าง

คำตอบ:


393

บนเซิร์ฟเวอร์:

mkdir my_project.git
cd my_project.git
git --bare init

บนลูกค้า:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

โปรดทราบว่าเมื่อคุณเพิ่มต้นกำเนิดมีหลายรูปแบบและสกีมาที่คุณสามารถใช้ได้ ฉันแนะนำให้คุณดูว่าบริการโฮสติ้งของคุณมีอะไรบ้าง


สิ่งเดียวที่ฉันเปลี่ยนแปลงเนื่องจากฉันทำงานจาก RubyMine คือฉันได้แทนที่ touch.it ของ gitignore ด้วยการสร้างโครงการทางรถไฟด้วยไฟล์เริ่มต้น 66 ไฟล์ ขอบคุณมาก!
Donald Hughes

ความรุ่งโรจน์สำหรับรายการคำสั่ง นี่คือวิธีที่ฉันได้ตั้งค่าที่เก็บระยะไกลด้วย
Dave Bacher

5
ฉันควรเพิ่มว่าถ้าคุณต้องการให้คนอื่นร่วมมือกับคุณใน repo นี้คุณควรเพิ่ม--sharedในตอนท้ายของgit --bare initคำสั่ง นี่จะเป็นการตั้งค่าการอนุญาตที่จำเป็น
Josh Lindsey

ขอบคุณสำหรับคำตอบนี้ เป็นประโยชน์อย่างมากหากมีสิ่งเช่นนี้ที่เติมในสิ่งที่ขาดหายไปในหนังสือที่ดีมากเกี่ยวกับคอมไพล์ แต่ก็ยังไม่ครอบคลุมงานแปลงจำนวนมากจาก CVS
octopusgrabbus

21
ฉันชอบวิ่งgit push --set-upstream origin masterแทนที่จะgit push origin masterเป็นครั้งแรก สิ่งนี้ช่วยให้ฉันพิมพ์git pushหรือgit pullแทนgit push origin masterทุกครั้ง สิ่งที่เหมาะกับความต้องการของคุณ
Rick Smith

8

คุณสามารถลองสิ่งนี้:

บนเซิร์ฟเวอร์:

การเพิ่มกลุ่มใหม่เป็น/etc/groupเช่น (ตัวอย่าง)

mygroup:1001:michael,nir

สร้างที่เก็บ git ใหม่:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

บนลูกค้า:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin youruser@yourserver.com:/path/to/my_project.git
git push origin master

(ขอบคุณ Josh Lindsey สำหรับฝั่งไคลเอ็นต์)

หลังจากไคลเอนต์ทำบนเซิร์ฟเวอร์คำสั่งนี้:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

หากมีข้อผิดพลาดนี้หลังจากดึง git:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

ลอง:

git push -u origin master

มันจะช่วย.


5

คุณจะต้องเพิ่มอย่างน้อยหนึ่งไฟล์.gitignoreเพื่อเก็บข้อมูลก่อนที่จะกระทำเช่น


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

5

หากโครงการของคุณไม่มีสาขาอัปสตรีมนั่นคือถ้านี่เป็นครั้งแรกที่ที่เก็บข้อมูลรีโมตกำลังจะทราบเกี่ยวกับสาขาที่สร้างในที่เก็บโลคัลของคุณคำสั่งต่อไปนี้ควรทำงาน

git push --set-upstream origin <branch-name>

3

@Josh Lindsey ตอบแล้วดีอย่างสมบูรณ์ แต่ฉันต้องการเพิ่มข้อมูลเนื่องจากฉันมักจะใช้ ssh

ดังนั้นเพียงแค่เปลี่ยน:

git remote add origin youruser@yourserver.com:/path/to/my_project.git

ถึง:

git remote add origin ssh://youruser@yourserver.com/path/to/my_project

โปรดทราบว่าเครื่องหมายโคลอนระหว่างโดเมนและเส้นทางไม่ได้อยู่ที่นั่นอีกต่อไป


1

คุณต้องตั้งค่าที่เก็บระยะไกลบนไคลเอนต์ของคุณ:

git remote add origin ssh://myserver.com/path/to/project

ฉันรันคำสั่งนั้น แต่ "git push master origin" ยังคงส่งผลให้เกิด "ไม่สามารถผลักดัน refs บางอย่าง" ฉันพยายามทำ "ต้นแบบต้นกำเนิดดึง git" และได้รับ "ไม่สามารถหาต้นแบบอ้างอิงระยะไกล"
Donald Hughes

ฉันไม่แน่ใจว่าจะสร้างความแตกต่างได้หรือไม่ แต่ที่เก็บข้อมูลระยะไกลของฉันถูกสร้างขึ้นด้วยgit --bare init@Josh Lindsey แนะนำ
Dave Bacher

ฉันมีปัญหาเดียวกัน "ล้มเหลวในการผลักดันผู้อ้างอิงบางส่วน" ... พยายามผลักสาขาหลักจาก repo หนึ่งที่ฉันสร้างขึ้น ... จากนั้นฉันสังเกตว่าที่มาไม่มีสาขาหลัก - ตรวจสอบให้แน่ใจว่าสาขาที่คุณกำลังพยายาม มีอยู่เพื่อดัน :)
Datum Geek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.