อะไรคือความแตกต่างระหว่าง“ การคอมไพล์คอมไพล์” และ“ การคอมไพล์พุช”?


895

ในแบบฝึกหัด Git ที่ฉันกำลังทำgit commitอยู่นั้นใช้เพื่อจัดเก็บการเปลี่ยนแปลงที่คุณทำ

ตอนนี้git pushใช้อะไร?


83
นอกจากนี้คุณยังสามารถดู "Git cheatsheet" ที่ช่วยให้ฉันเข้าใจแนวคิดได้เป็นอย่างดี: ndpsoftware.com/git-cheatsheet.html
adriendenat

นี่คืออีกสูตรโกง: atlassian.com/git/tutorials/atlassian-git-cheatsheet
Kolob Canyon

2
ไม่มีคำตอบเนื่องจากได้ถูกจัดเตรียมไว้แล้ว เพียงแค่การสังเกต ดูเหมือนว่าสำหรับฉันความมุ่งมั่นควรจะเรียกว่าบันทึกและผลักดันที่ควรจะเรียก ปัญหาสถานการณ์การตั้งชื่อแบบคลาสสิค
dublinx

คำตอบ:


1619

โดยทั่วไปgit commit" บันทึกการเปลี่ยนแปลงที่เก็บ " ในขณะที่git push" อัพเดตการอ้างอิงระยะไกลพร้อมกับวัตถุที่เกี่ยวข้อง " ดังนั้นอันแรกจะถูกใช้ในการเชื่อมต่อกับที่เก็บในเครื่องของคุณในขณะที่อันหลังถูกใช้เพื่อโต้ตอบกับที่เก็บระยะไกล

นี่เป็นภาพสวย ๆ จากOliver Steeleที่อธิบายโมเดล git และคำสั่ง:

คำสั่งการส่งข้อมูล Git

อ่านเพิ่มเติมเกี่ยวกับgit pushและgit pullบนGitReady.com (บทความที่ฉันอ้างถึงก่อน)


20
นี่คือแหล่งที่มาดั้งเดิม: osteele.com/archives/2008/05/my-git-workflowพร้อมรูปภาพเวิร์กโฟลว์ git อีกรูปแบบหนึ่ง
tanascius

9
@ben github เป็นเพียงทางออกหนึ่งในการโฮสต์สาธารณะของคุณ "on-the-cloud" ซึ่งเป็นพื้นที่เก็บข้อมูลสำหรับgit pushการทำงานกับ ในความเป็นจริงปลายทางของgit pushสามารถเป็นที่เก็บ git ใด ๆ อาจอยู่ในฮาร์ดไดรฟ์ในเครื่องของคุณในไดเรกทอรีอื่น ( git remote add clone ~/proj/clone.git; git push clone masterหรือgit push ~/proj/clone.git masterตัวอย่าง) หรือที่เก็บ git ที่โฮสต์ของคุณให้บริการ
Santa

2
ดังนั้น ... คุณต้องผลักดันก่อนหรือกระทำก่อน
Kokodoko

5
@ เงียบมันเริ่มต้นที่เวิร์กสเปซของคุณซึ่งคุณแก้ไขไฟล์ จากนั้นคุณเพิ่มลงในดัชนีคอมมิทพวกเขาในพื้นที่เก็บข้อมูลท้องถิ่นและ - ในที่สุด - ผลักพวกเขาไปยังพื้นที่เก็บข้อมูลระยะไกล
ตานาสเซี

2
@ Mr.Hyde ไม่เป็นไปไม่ได้ Git เป็นตัวควบคุมเวอร์ชันแบบกระจายคุณต้องมีสำเนาภายในเครื่อง
tanascius

215

กระทำ : การเพิ่มการเปลี่ยนแปลงในพื้นที่เก็บข้อมูลท้องถิ่น

push : เพื่อโอนการกระทำล่าสุดไปยังเซิร์ฟเวอร์ระยะไกล


56

โดยทั่วไปคอมไพล์คอมมิททำให้การเปลี่ยนแปลงของคุณเป็น repo ท้องถิ่นของคุณในขณะที่ git push ส่งการเปลี่ยนแปลงของคุณไปยังตำแหน่งระยะไกล


9
นี่เป็นวันที่สองของฉันในการใช้ GIT เมื่อฉันดูคำตอบข้างต้นฉันก็ยังไม่ได้ภาพที่ชัดเจน แต่คำตอบของคุณแค่ตอกมันไว้ ขอบคุณ
Bopha

1
ไม่git pushอัปโหลดไฟล์ที่อัปเดตจริงหรือบางพิเศษ "ต่าง" แฟ้ม?
หลากสีช่วง

27

git pushใช้เพื่อเพิ่มการกระทำที่คุณได้ทำไว้ในที่เก็บข้อมูลโลคัลไปยังรีโมต - git pullซึ่งอนุญาตให้ผู้คนทำงานร่วมกันได้


26

เนื่องจาก git เป็นระบบควบคุมเวอร์ชันแบบกระจายความแตกต่างคือการกระทำจะส่งการเปลี่ยนแปลงไปยังที่เก็บในเครื่องของคุณ


19

กระทำ : Snapshot | Changeset | ประวัติ รุ่น | 'บันทึกเป็นของพื้นที่เก็บข้อมูล พื้นที่เก็บข้อมูล Git = ชุด (ต้นไม้) ของกระทำ

ที่เก็บในเครื่อง: ที่เก็บในคอมพิวเตอร์ของคุณ

ที่เก็บข้อมูลระยะไกล : ที่เก็บข้อมูลบนเซิร์ฟเวอร์ ( Github )

git commit: ผนวกใหม่กระทำ (last กระทำ + ฉากปรับเปลี่ยน) เพื่อท้องถิ่นพื้นที่เก็บข้อมูล (ความมุ่งมั่นทั้งหมดจะถูกเก็บไว้ใน/.git)

git push, git pull: ซิงค์ท้องถิ่นพื้นที่เก็บข้อมูลที่เกี่ยวข้องกับ ระยะไกลพื้นที่เก็บข้อมูล push- นำการเปลี่ยนแปลงจากท้องถิ่นเข้ามาในระยะไกล , pull- นำการเปลี่ยนแปลงจากระยะไกลเข้ามาในท้องถิ่น


11

git commitบันทึกการเปลี่ยนแปลงของคุณไปยังท้องถิ่นที่เก็บ

git push อัพเดตที่เก็บรีโมตด้วยการเปลี่ยนแปลงโลคัลของคุณ


20
คำตอบของคุณนั้นเป็นเหมือนกันกับคำตอบนี้ก็ไม่ได้เพิ่มอะไรใหม่

7

สามสิ่งที่ควรทราบ:

1) Working Directory ----- โฟลเดอร์ที่มีไฟล์รหัสของเรา

2) Local Repository ------ นี่คือระบบของเรา เมื่อเราใช้คำสั่ง COMMIT เป็นครั้งแรกจะมีการสร้างที่เก็บข้อมูลภายในเครื่องนี้ ในสถานที่เดียวกันซึ่งเป็นไดเรกทอรีทำงานของเรา
ไฟล์ Checkit (.git) จะถูกสร้างขึ้น
หลังจากนั้นเมื่อเราทำการกระทำสิ่งนี้จะเก็บการเปลี่ยนแปลงที่เราทำไว้ในไฟล์ของ Working Directory ไปยัง Local Repository (.git)

3) พื้นที่เก็บข้อมูลระยะไกล ----- นี้ตั้งอยู่นอกระบบของเราเช่นบนเซิร์ฟเวอร์ที่ตั้งอยู่ที่ใดในโลก ชอบ GitHub เมื่อเราสร้างคำสั่ง PUSH รหัสจากที่เก็บในพื้นที่ของเราจะถูกเก็บไว้ใน Remote Repository นี้


7

เพียงแค่ต้องการเพิ่มจุดต่อไปนี้:

ที่นั่นไม่สามารถผลักดันจนกว่าคุณจะยอมรับในขณะที่เราใช้git pushในการผลักดันการกระทำในสาขาท้องถิ่นของคุณไปยังที่เก็บระยะไกล

git pushคำสั่งเวลาสองขัดแย้ง:

ชื่อรีโมตตัวอย่างเช่นorigin ชื่อสาขาตัวอย่างเช่นmaster

ตัวอย่างเช่น:

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master

4

การเปรียบเทียบที่หยาบมาก: ถ้าเราเปรียบเทียบgit commitกับการบันทึกไฟล์ที่แก้ไขแล้วgit pushจะเป็นการคัดลอกไฟล์นั้นไปยังตำแหน่งอื่น

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


1

เป็นการง่ายกว่าที่จะเข้าใจการใช้คำสั่ง git addและcommitถ้าคุณนึกภาพล็อกไฟล์ที่เก็บรักษาไว้ในที่เก็บของคุณบน Github ล็อกไฟล์ของโครงการทั่วไปสำหรับฉันอาจมีลักษณะดังนี้:

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

ฉันมักจะเริ่มต้นวันด้วยการgit pullร้องขอและจบลงด้วยการgit pushร้องขอ ดังนั้นทุกอย่างภายในบันทึกของวันนั้นสอดคล้องกับสิ่งที่เกิดขึ้นระหว่างพวกเขา ในแต่ละวันมีงานลอจิกอย่างน้อยหนึ่งอย่างที่ฉันทำซึ่งต้องเปลี่ยนไฟล์ไม่กี่ไฟล์ ไฟล์ที่แก้ไขระหว่างงานนั้นจะแสดงรายการไว้ในดัชนี

แต่ละภารกิจย่อยเหล่านี้ (ภารกิจ A และภารกิจ B ที่นี่) เป็นภารกิจเดี่ยว git addคำสั่งเพิ่มไฟล์ไป 'ดัชนีของไฟล์ที่มีการเปลี่ยนแปลงรายชื่อ กระบวนการนี้เรียกว่าการจัดเตรียมและในความเป็นจริงบันทึกการเปลี่ยนแปลงไฟล์และการเปลี่ยนแปลงที่ดำเนินการ git commitบันทึกคำสั่ง / สรุปการเปลี่ยนแปลงและรายการดัชนีที่สอดคล้องกันพร้อมกับข้อความที่กำหนดเองซึ่งอาจจะใช้สำหรับการอ้างอิงในภายหลัง

โปรดจำไว้ว่าคุณยังคงเปลี่ยนเฉพาะที่เก็บในเครื่องของคุณและไม่เปลี่ยนเป็นที่เก็บใน Github หลังจากนี้เฉพาะเมื่อคุณทำการgit pushเปลี่ยนแปลงที่บันทึกไว้เหล่านี้พร้อมกับไฟล์ดัชนีของคุณสำหรับแต่ละการกระทำจะได้รับการบันทึกไว้ในที่เก็บหลัก (บน Github)

ตัวอย่างเพื่อให้ได้รายการที่สองในล็อกไฟล์จินตภาพนั้นฉันก็จะทำ:

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

สรุปgit addและgit commitช่วยให้คุณสามารถแยกการเปลี่ยนแปลงไปยังที่เก็บข้อมูลหลักเป็นการเปลี่ยนแปลงเชิงตรรกะย่อยอย่างเป็นระบบ เช่นเดียวกับคำตอบและความคิดเห็นอื่น ๆ ที่ชี้ให้เห็นว่ามีประโยชน์หลายประการสำหรับพวกเขา อย่างไรก็ตามนี่เป็นหนึ่งในประเพณีที่ใช้กันมากที่สุดและหลักการขับรถที่อยู่เบื้องหลัง Git เป็นระบบควบคุมการแก้ไขแบบหลายขั้นตอนซึ่งแตกต่างจากคนอื่น ๆ ที่นิยมเช่น Svn


0

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

ซึ่งหมายความว่าเราสามารถทำคอมมิชชันหลายอย่างก่อนที่จะผลักดันไปยังรีโมต (เราสามารถดูรายการการคอมมิทที่เกิดขึ้นและข้อความด้วย) คอมไพล์บันทึกแต่ละคอมมิทด้วยรหัสกระทำซึ่งเป็นรหัส 40 หลัก

และฉันใช้ git push เฉพาะเมื่อฉันต้องการเห็นการเปลี่ยนแปลงของฉันในระยะไกล (หลังจากนั้นฉันจะตรวจสอบว่ารหัสของฉันทำงานเป็นเจนกินส์หรือไม่)


-1

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

แหล่งที่มาของ Google

http://gitref.org/basic/ลิงค์นี้จะมีประโยชน์มากเช่นกัน

https://git-scm.com/docs/git-commit


คำตอบนี้คัดลอกคำสำหรับคำอื่น ๆ คำตอบเป็นหนึ่ง
Jeffery Opoku-Mensah

มันไม่ได้นำอะไรแปลกใหม่มาให้ทุกคนที่เคยพูดไปก่อนหน้านี้ ...
ฮับโล

-1

ในแง่คนธรรมดาgit commitเป็นขั้นตอนก่อนที่git pushคุณจะเรียกใช้พวกเขาในการที่จะประสบความสำเร็จในการคอมไพล์ไฟล์ของคุณเพื่อ GitHub


-2

git commitคือการคอมมิทไฟล์ที่ staged ใน repo โลคอล git pushคือการกรอไปข้างหน้าอย่างรวดเร็วสาขาหลักของด้านท้องถิ่นด้วยสาขาต้นแบบระยะไกล แต่การผสานจะไม่ประสบความสำเร็จเสมอไป ถ้าปฏิเสธจะปรากฏขึ้นคุณจะต้องเพื่อให้คุณสามารถทำให้ประสบความสำเร็จpullgit push


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