Git สำหรับผู้เริ่มต้น: คู่มือปฏิบัติที่ชัดเจน


854

ตกลงหลังจากที่เห็นโพสต์นี้โดย PJ Hyettฉันได้ตัดสินใจที่จะข้ามไปที่สิ้นสุดและไปกับGit

ดังนั้นสิ่งที่ฉันต้องการก็คือการเริ่มต้นของการปฏิบัติคู่มือ Git "ผู้เริ่มต้น" ถูกกำหนดให้เป็นคนที่รู้วิธีจัดการกับคอมไพเลอร์เข้าใจในระดับที่ว่าMakefileคืออะไรและมีการควบคุมแหล่งที่มาแบบสัมผัสโดยไม่เข้าใจมันเป็นอย่างดี

"ใช้งานได้จริง" เนื่องจากบุคคลนี้ไม่ต้องการรับรายละเอียดที่ดีเกี่ยวกับสิ่งที่ Git กำลังทำอยู่เบื้องหลังและไม่สนใจ (หรือรู้) ว่ามันเผยแพร่ คำตอบของคุณอาจบอกเป็นนัยถึงความเป็นไปได้ แต่พยายามตั้งเป้าหมายสำหรับผู้เริ่มต้นที่ต้องการเก็บที่เก็บข้อมูล 'หลัก' บน 'เซิร์ฟเวอร์' ซึ่งสำรองและปลอดภัย

ดังนั้น:

การติดตั้ง / การตั้งค่า

ทำงานกับรหัส

การติดแท็กการแตกแขนงการปล่อยเส้นเขตแดน

อื่น ๆ

  • อธิบายและลิงก์ไปยัง GUI ที่ดีปลั๊กอิน IDE ฯลฯ ที่ทำให้ Git เป็นแหล่งข้อมูลที่ไม่ใช่บรรทัดคำสั่ง แต่โปรดแสดงรายการข้อ จำกัด เช่นเดียวกับข้อดีของมัน
    • msysgit - Cross platform รวมอยู่ใน Git
    • gitk - โปรแกรมดูประวัติข้ามแพลตฟอร์มที่รวมอยู่ใน Git
    • gitnub - Mac OS X
    • gitx - โปรแกรมดูประวัติ Mac OS X
    • smartgit - แพลตฟอร์มข้ามการค้าเบต้า
    • tig - console GUI สำหรับ Linux
    • qgit - GUI สำหรับ Windows, Linux
    • Git Extensions - แพ็คเกจสำหรับ Windows รวมถึง GUI ที่เป็นมิตร
  • งานทั่วไปอื่น ๆ ที่ผู้เริ่มต้นควรรู้หรือไม่?
  • ฉันจะทำงานอย่างมีประสิทธิภาพด้วยชุดที่เก็บ subversion เป็นแหล่งควบคุมของฉันได้อย่างไร

การอ้างอิงของ Git มือใหม่อื่น ๆ

เจาะลึก Git

ฉันจะผ่านรายการเป็นครั้งคราวและ 'เป็นระเบียบ' พวกเขาเพื่อให้มีลักษณะ / ความรู้สึกที่สอดคล้องและง่ายต่อการสแกนรายการ - อย่าลังเลที่จะทำตามส่วนหัว "ง่าย - คำอธิบายสั้น ๆ - รายการคำแนะนำ - gotchas และ เทมเพลตข้อมูลพิเศษ ฉันจะเชื่อมโยงไปยังรายการจากรายการหัวข้อย่อยด้านบนเพื่อให้ค้นหาได้ง่ายในภายหลัง

คำตอบ:


118

คุณจะสร้างโครงการ / พื้นที่เก็บข้อมูลใหม่ได้อย่างไร

พื้นที่เก็บข้อมูล git เป็นเพียงไดเรกทอรีที่มี.gitไดเรกทอรีพิเศษ

สิ่งนี้แตกต่างจากระบบควบคุมรุ่น "รวมศูนย์" (เช่นการโค่นล้ม) ซึ่ง "repository" ถูกโฮสต์บนเซิร์ฟเวอร์ระยะไกลซึ่งคุณcheckoutเข้าสู่ไดเรกทอรี "ทำสำเนา" ด้วย git สำเนาการทำงานของคุณคือพื้นที่เก็บข้อมูล

เพียงแค่เรียกใช้git initในไดเรกทอรีที่มีไฟล์ที่คุณต้องการติดตาม

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

cd ~/code/project001/
git init

สิ่งนี้จะสร้าง.gitโฟลเดอร์ (ซ่อน) ในไดเรกทอรีปัจจุบัน

ในการสร้างโครงการใหม่ให้เรียกใช้git initด้วยอาร์กิวเมนต์เพิ่มเติม (ชื่อของไดเรกทอรีที่จะสร้าง):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

ในการตรวจสอบว่าเส้นทางปัจจุบันอยู่ในที่เก็บ git หรือไม่เพียงแค่เรียกใช้git status- หากไม่ใช่ที่เก็บก็จะรายงานว่า "ร้ายแรง: ไม่ใช่ที่เก็บ git"

คุณสามารถแสดงรายการไดเรคทอ.gitรีและตรวจสอบว่ามีไฟล์ / ไดเร็กตอรี่ที่คล้ายกับต่อไปนี้:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

หากคุณต้องการ "de-git" ที่เก็บข้อมูลด้วยเหตุผลใดก็ตาม (คุณต้องการหยุดใช้ git เพื่อติดตามโครงการนั้น) เพียงลบ.gitไดเรกทอรีที่ระดับฐานของพื้นที่เก็บข้อมูล

cd ~/code/project001/
rm -rf .git/

ข้อควรระวัง:นี้จะทำลายทุกประวัติการแก้ไข, ทุกแท็กของคุณทุกอย่างที่คอมไพล์ได้ทำ มันจะไม่สัมผัสไฟล์ "ปัจจุบัน" (ไฟล์ที่คุณสามารถดูได้) แต่การเปลี่ยนแปลงก่อนหน้าไฟล์ที่ถูกลบและอื่น ๆ จะไม่สามารถกู้คืนได้!


3
Git ทำให้วัตถุเป็นแบบอ่านอย่างเดียวดังนั้นคุณจะต้องrm -rf .gitลบฐานข้อมูลของ git
Josh Lee

โดยปกติจะต้องสร้างไฟล์. gitignore ระหว่างการใช้งานปกติเพื่อระบุไฟล์ / ต้นไม้เพื่อละเว้นในการกำหนดเวอร์ชันดังนั้นให้สมบูรณ์เกี่ยวกับส่วนสุดท้ายของ "de-gitting" นอกเหนือจากการลบ. git คุณจะต้องลบ ไฟล์ gitignore :)
Monoman

วิธีการเกี่ยวกับที่เก็บเปลือย? พวกเขาจะ "รวมศูนย์" และฉันคิดว่าพวกเขาเป็นสิ่งที่ดีสำหรับโครงการหลายโครงการที่ต้องการการรวมศูนย์ (เช่น: โครงการที่พัฒนาโดยคนจำนวนมาก)
peoro

WRT กำลังทำงานgit statusเพื่อให้แน่ใจว่าคุณอยู่ในพื้นที่เก็บข้อมูล: นี่เป็นหนึ่ง gotcha: หากคุณมีตัวแปรสภาพแวดล้อม $ GIT_DIR ตั้งอยู่ในเปลือกปัจจุบันของคุณ git จะไม่สนใจตำแหน่งปัจจุบันของคุณและใช้ที่เก็บที่ $ GIT_DIR ฉันควรจะรู้ว่าเมื่อวานนี้ฉันเสียเวลาหนึ่งชั่วโมง
sanmiguel

110

GUIs สำหรับคอมไพล์


Git GUI

รวมอยู่ใน git - เรียกใช้git guiจากบรรทัดคำสั่งและตัวติดตั้งWindows msysgitจะเพิ่มลงในเมนูเริ่ม

Git GUI สามารถทำสิ่งที่คุณต้องทำกับ git เป็นส่วนใหญ่ รวมถึงการเปลี่ยนแปลงขั้นตอนกำหนดค่าคอมไพล์และที่เก็บผลักดันการเปลี่ยนแปลงสร้าง / ชำระเงิน / ลบสาขารวมและอื่น ๆ อีกมากมาย

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

มันไม่ได้เป็นแอพพลิเคชั่นที่สวยที่สุด แต่มันใช้งานได้กับแพลตฟอร์มเกือบทั้งหมด (อิงตาม Tcl / Tk)

ภาพหน้าจอ | screencast


gitk

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

ไปด้วยกันอย่างดีกับ git-gui


Gitnub

แอปพลิเคชัน Mac OS X ส่วนใหญ่เทียบเท่าgit logแต่มีการรวมกับgithub (เช่น "มุมมองเครือข่าย")

ดูสวยและเหมาะกับ Mac OS X คุณสามารถค้นหาที่เก็บได้ การวิพากษ์วิจารณ์ที่ใหญ่ที่สุดของ Gitnub คือมันแสดงให้เห็นประวัติศาสตร์ในแบบเชิงเส้น (สาขาเดียวในแต่ละครั้ง) - มันไม่ได้มองภาพการแยกและการรวมซึ่งอาจมีความสำคัญกับ git แม้ว่านี่เป็นการปรับปรุงที่วางแผนไว้

ดาวน์โหลดลิงค์เปลี่ยนบันทึกและภาพหน้าจอ | git repository


GitX

ตั้งใจจะเป็น "gitk clone สำหรับ OS X"

มันสามารถเห็นภาพประวัติศาสตร์การแตกกิ่งที่ไม่เป็นเชิงเส้นทำคอมมิตดูและค้นหาคอมมิชชันและมีคุณสมบัติที่ดีอื่น ๆ เช่นความสามารถในการ "Quicklook" ไฟล์ใด ๆ ในการแก้ไขใด ๆ (พื้นที่กดในมุมมองรายการไฟล์) ส่งออกไฟล์ใด ๆ (ผ่านการลากและวาง)

มันเป็นเรื่องที่ดีกว่ารวมเข้ากับ OS X กว่าgit-gui/ gitkและเป็นไปอย่างรวดเร็วและมีเสถียรภาพแม้จะมีการเก็บขนาดใหญ่พิเศษ

Pieter ที่เก็บข้อมูล git ดั้งเดิมไม่ได้อัปเดตเมื่อเร็ว ๆ นี้ สาขาที่ได้รับการดูแลอย่างแข็งขันมีให้บริการที่brotherbard / gitx - เพิ่มแถบด้านข้างดึงดึงผลักเพิ่มระยะไกลผสานรวมเชอร์รี่คัดสรร rebase โคลนเพื่อ

ดาวน์โหลด | ภาพหน้าจอ | git repository | ส้อม brotherbard | ช้อนส้อม


SmartGit

จากหน้าแรก:

SmartGit เป็น front-end สำหรับระบบควบคุมเวอร์ชันแบบกระจาย Git และทำงานบน Windows, Mac OS X และ Linux SmartGit มีไว้สำหรับนักพัฒนาที่ต้องการอินเทอร์เฟซผู้ใช้แบบกราฟิกบนไคลเอนต์บรรทัดคำสั่งเพื่อให้ทำงานได้มากขึ้นด้วย Git - DVCS ที่ทรงพลังที่สุดในปัจจุบัน

คุณสามารถดาวน์โหลดได้จากเว็บไซต์ของพวกเขา

ดาวน์โหลด


TortoiseGit

รุ่น TortoiseSVN Git สำหรับผู้ใช้ Windows

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

ดาวน์โหลด


QGit

QGit เป็นโปรแกรมดู GUI git ที่สร้างขึ้นบน Qt / C ++

ด้วย qgit คุณจะสามารถเรียกดูประวัติการแก้ไขดูเนื้อหาของแพทช์และไฟล์ที่เปลี่ยนแปลงแก้ไขกราฟิกตามสาขาการพัฒนาที่แตกต่างกัน

ดาวน์โหลด


gitg

gitg เป็นโปรแกรมดูพื้นที่เก็บข้อมูล git ที่กำหนดเป้าหมาย gtk + / GNOME หนึ่งในวัตถุประสงค์หลักของมันคือการมอบประสบการณ์การใช้งานแบบรวมที่มากขึ้นสำหรับส่วนหน้าของคอมไพล์ในหลาย ๆ เดสก์ท็อป สิ่งนี้ไม่ได้เป็นการเขียนแอปพลิเคชันข้ามแพลตฟอร์ม แต่โดยการทำงานร่วมกันอย่างใกล้ชิดกับไคลเอนต์ที่คล้ายกันสำหรับระบบปฏิบัติการอื่น ๆ (เช่น GitX สำหรับ OS X)

คุณสมบัติ

  • เรียกดูประวัติการแก้ไข
  • จัดการที่เก็บข้อมูลขนาดใหญ่ (โหลดที่เก็บ linux, การแก้ไขมากกว่า 17000 ครั้ง, ภายใน 1 วินาที)
  • กระทำการเปลี่ยนแปลง
  • สเตจ / สเตจที่ไม่ขึ้นเวทีแต่ละอัน
  • ย้อนกลับการเปลี่ยนแปลง
  • แสดงส่วนต่างของการเปลี่ยนแปลงในการแก้ไข
  • เรียกดูต้นไม้สำหรับการแก้ไขที่กำหนด
  • ส่งออกบางส่วนของต้นไม้ของการแก้ไขที่กำหนด
  • ระบุ refspec ใด ๆ ที่คำสั่งเช่น 'บันทึก git' สามารถเข้าใจในการสร้างประวัติศาสตร์
  • แสดงและสลับระหว่างสาขาในมุมมองประวัติ

ดาวน์โหลด: เผยแพร่หรือแหล่งที่มา


Gitbox

Gitbox เป็นอินเตอร์เฟสกราฟิก Mac OS X สำหรับระบบควบคุมเวอร์ชัน Git ในหน้าต่างเดียวคุณจะเห็นสาขาประวัติและสถานะไดเรกทอรีทำงาน

การดำเนินงานทุกวันเป็นเรื่องง่าย: ขั้นตอนและการเปลี่ยนแปลงที่ไม่แน่นอนด้วยช่องทำเครื่องหมาย กระทำการดึงผสานและกดได้ในคลิกเดียว ดับเบิลคลิกที่การเปลี่ยนแปลงเพื่อแสดงส่วนต่างกับ FileMerge.app

ดาวน์โหลด


Gity

เว็บไซต์ Gity มีข้อมูลไม่มากนัก แต่จากภาพหน้าจอที่ปรากฏเป็นเว็บไซต์โอเพ่นซอร์ส OS X git gui

ดาวน์โหลดหรือแหล่งที่มา


meld

Meld เป็นเครื่องมือ diff และผสานการมองเห็น คุณสามารถเปรียบเทียบไฟล์สองหรือสามไฟล์และแก้ไขไฟล์เหล่านั้น (อัปเดตแบบไดนามิก) คุณสามารถเปรียบเทียบสองหรือสามโฟลเดอร์และเปิดใช้การเปรียบเทียบไฟล์ คุณสามารถเรียกดูและดูสำเนาที่ใช้งานได้จากระบบควบคุมเวอร์ชันยอดนิยมเช่น CVS, Subversion, Bazaar-ng และ Mercurial [ และ Git ]

ดาวน์โหลด


Katana

Git GUI สำหรับ OSX โดย Steve Dekorte

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

ฟรีสำหรับ 1 ที่เก็บ $ 25 สำหรับเพิ่มเติม

ดาวน์โหลด


ต้นกล้า (เดิมคือ GitMac)

เน้นที่การทำให้ Git ใช้งานง่าย โดดเด่นด้วย UI ของ Cocoa ดั้งเดิม (เหมือนเครื่อง Mac), การเรียกดูพื้นที่เก็บข้อมูลอย่างรวดเร็ว, การโคลน, การผลัก / ดึง, การรวมสาขา / การรวม, การมองเห็นที่แตกต่างกัน, สาขาระยะไกล, การเข้าถึงเทอร์มินัลและอื่น ๆ

ด้วยการทำให้การกระทำ Git ที่ใช้บ่อยที่สุดใช้งานง่ายและใช้งานง่าย Sprout (ชื่อเดิมของ GitMac) ทำให้ Git นั้นใช้งานง่าย เข้ากันได้กับเวิร์กโฟลว์ Git ส่วนใหญ่ Sprout นั้นยอดเยี่ยมสำหรับนักออกแบบและนักพัฒนาการทำงานร่วมกันเป็นทีมและผู้ใช้ขั้นสูงและมือใหม่

ดาวน์โหลด | เว็บไซต์


หอคอย

Git GUI ที่มีคุณสมบัติหลากหลายสำหรับ Mac OSX ทดลองใช้ฟรี 30 วัน $ 59 USD สำหรับสิทธิ์ใช้งานแบบผู้ใช้เดี่ยว

ดาวน์โหลด | เว็บไซต์


EGit

EGit เป็นผู้ให้บริการ Eclipse Team สำหรับระบบควบคุมเวอร์ชัน Git Git เป็น SCM แบบกระจายซึ่งหมายความว่านักพัฒนาทุกคนมีสำเนาเต็มของประวัติทั้งหมดของการแก้ไขรหัสทุกครั้งทำให้สามารถสืบค้นประวัติศาสตร์ได้อย่างรวดเร็วและหลากหลาย

โปรเจ็กต์ EGit กำลังใช้ Eclipse tooling บน JGit Java ของ Git

ดาวน์โหลด | เว็บไซต์


ส่วนขยาย Git

โอเพ่นซอร์สสำหรับ Windows - ติดตั้งทุกสิ่งที่คุณจำเป็นต้องใช้กับ Git ในแพ็คเกจเดียวใช้งานง่าย

Git Extensions เป็นชุดเครื่องมือที่จะทำให้การทำงานกับ Git บน Windows เป็นไปได้ง่ายขึ้น ส่วนขยายของเชลล์จะทำงานร่วมกันใน Windows Explorer และนำเสนอเมนูบริบทในไฟล์และไดเรกทอรี นอกจากนี้ยังมีปลั๊กอิน Visual Studio เพื่อใช้คอมไพล์จาก Visual Studio

ดาวน์โหลด

ขอบคุณมากสำหรับdbrสำหรับรายละเอียดเกี่ยวกับเนื้อหาของ guit


SourceTree

SourceTree เป็นไคลเอนต์ Mac ฟรีสำหรับ Git, Mercurial และ SVN สร้างโดย Atlassian คนที่อยู่เบื้องหลัง BitBucket ดูเหมือนว่าจะทำงานได้ดีกับระบบ VC ใด ๆ ซึ่งช่วยให้คุณสามารถควบคุมเครื่องมือเดียวสำหรับใช้กับโครงการทั้งหมดของคุณ เต็มไปด้วยคุณสมบัติและฟรี

ผู้เชี่ยวชาญพร้อมและคุณสมบัติเต็มรูปแบบสำหรับผู้ใช้ใหม่และผู้ใช้ขั้นสูง:

ตรวจสอบเซ็ตการแก้ไขขาออกและขาเข้า เชอร์รี่เลือกระหว่างสาขา การจัดการแพทช์, การรีบูต, การสะสม / ชั้นวางและอีกมากมาย

ดาวน์โหลด | เว็บไซต์



2
คุณมีคำตอบที่ดี (โดยเฉพาะ gitcasts และคำตอบแบบ push / pull) แต่ฉันสามารถแนะนำให้แยกคำตอบออกเป็นคำตอบแยกกันได้หรือไม่? ผู้ถามขอให้คุณ "อย่าพยายามติดขัดข้อมูลเป็นคำตอบเดียว"!
dbr

3
บางทีคุณควรเพิ่ม TortoiseGit code.google.com/p/tortoisegitลงในรายการของคุณสำหรับ gitters ของ Windows ...
kret

1
Gity ( macendeavor.com/gity ) เป็นตัวเลือก แต่ยังอยู่ในระหว่างการพัฒนา (OS X)
เดฟเดอลอง

2
Tower ("ลูกค้า Git ที่ทรงพลังที่สุดสำหรับ Mac") เป็นลูกค้าใหม่ที่สวยงามสำหรับ Git
rubiii

59

ดีแม้จะมีความจริงที่ว่าคุณถามว่าเราไม่ได้ "เพียงแค่" การเชื่อมโยงไปยังแหล่งข้อมูลอื่น ๆ ก็โง่สวยเมื่อมีอยู่แล้วเติบโตในชุมชน (และการเจริญเติบโต) ทรัพยากรที่จริงค่อนข้างดีคือGit หนังสือชุมชน อย่างจริงจังคำถามนี้มี 20+ คำถามจะเป็นอะไรก็ได้ แต่รัดกุมและสอดคล้องกัน Git Community Book มีทั้งแบบ HTML และ PDF และตอบคำถามของคุณมากมายด้วยคำตอบที่ชัดเจนรูปแบบที่ดีและมีการตรวจสอบโดยเพื่อนและในรูปแบบที่ช่วยให้คุณสามารถข้ามไปยังปัญหาของคุณได้ทันที

อนิจจาถ้าโพสต์ของฉันทำให้คุณโกรธจริงๆฉันจะลบมัน แค่พูดอย่างนั้น


2
หากคุณไม่ได้ใช้ git เพราะเป็น DVCS ทำไมต้องใช้ git เลย? คำถามนี้โง่และเบี่ยงเบนทรัพยากรที่สามารถใช้ในสิ่งอื่นเพื่อให้บรรลุเป้าหมายที่น่าสงสัย
Randal Schwartz

56

วิธีกำหนดค่าให้ละเว้นไฟล์:

ความสามารถในการมีไฟล์ละเว้นการคอมไพล์ที่คุณไม่ต้องการให้ติดตามมีประโยชน์มาก

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

  • บรรทัดว่างจะไม่สนใจไฟล์ใด ๆ โดยทั่วไปจะใช้เป็นตัวคั่น
  • บรรทัดที่จ้องมองด้วย#ทำหน้าที่เป็นความคิดเห็น
  • ตัว! คำนำหน้าเป็นตัวเลือกและจะปฏิเสธรูปแบบ รูปแบบที่ถูกทำให้ไร้ผลใด ๆ ที่ตรงกันจะแทนที่รูปแบบที่มีลำดับความสำคัญต่ำกว่า
  • รองรับการแสดงออกขั้นสูงและบัตรเสริม
    • ตัวอย่าง: รูปแบบ: *. [oa] จะไม่สนใจไฟล์ทั้งหมดในที่เก็บซึ่งลงท้ายด้วย. o หรือ. a (ไฟล์วัตถุและไฟล์เก็บถาวร)
  • หากรูปแบบมีไดเรกทอรีที่ลงท้ายด้วย slash git จะจับคู่เฉพาะไดเรกทอรีนี้และเส้นทางที่อยู่ด้านล่าง สิ่งนี้ไม่รวมไฟล์ปกติและลิงก์สัญลักษณ์จากการแข่งขัน
  • เครื่องหมายทับนำหน้าจะจับคู่ไฟล์ทั้งหมดในชื่อพา ธ นั้น
    • ตัวอย่าง: รูปแบบ/*.cจะตรงกับไฟล์foo.cแต่ไม่ใช่bar / awesome.c

ตัวอย่างที่ดีจากหน้าคนgitignore (5) :

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

โดยทั่วไปมีสามวิธีในการละเว้นไฟล์ที่ไม่ได้ติดตาม

1) ละเว้นผู้ใช้ที่เก็บข้อมูลทั้งหมด:

เพิ่มไฟล์ชื่อ. gitignoreไปที่รูทของสำเนาการทำงานของคุณ

แก้ไข. gignignoreให้ตรงกับค่ากำหนดของคุณที่ควร / ควรละเว้นไฟล์ใด

git add .gitignore 

และกระทำเมื่อคุณทำเสร็จแล้ว

2) ไม่สนใจเฉพาะที่เก็บสำเนาของคุณ:

เพิ่ม / แก้ไขไฟล์$ GIT_DIR / info / แยกในสำเนาการทำงานของคุณด้วยรูปแบบที่คุณต้องการ

ตัวอย่าง: สำเนาการทำงานของฉันคือ ~ / src / project1 ดังนั้นฉันจะแก้ไข~ / src / project1 / .git / info / แยก

คุณทำเสร็จแล้ว!

3) เพิกเฉยในทุกสถานการณ์ในระบบของคุณ:

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

ของฉันเป็นการส่วนตัวเรียกว่า~ / .gitglobalignore

ฉันสามารถให้ git รู้จักไฟล์นี้โดยแก้ไขไฟล์~ / .gitconfigด้วยบรรทัดต่อไปนี้:

core.excludesfile = ~/.gitglobalignore

คุณทำเสร็จแล้ว!

ฉันค้นหาหน้าgitignoreเพื่อเป็นแหล่งข้อมูลที่ดีที่สุดสำหรับข้อมูลเพิ่มเติม


มีใครสักคนโปรดเพิ่มรายละเอียดเล็กน้อย แต่สำคัญในโพสต์นี้ ใช้งานได้กับไฟล์ที่ไม่ได้ติดตามโดย git เท่านั้น เป็นไฟล์ 'untrack' แต่ทิ้งไว้ในระบบไฟล์คุณต้อง 'git rm --cached filename' ขอบคุณ!
Nikita Rybak

ฉันแค่ต้องการทราบว่าการเพิ่มบรรทัด core.excludesfile ไม่ทำงานสำหรับฉัน ฉันต้อง [git config --global core.excludesfile ~ / .gitglobalignore] เพื่อให้มันใช้งานได้
เข้ารหัสเขต

ขณะนี้มีโครงการใน Github เรียกว่า gitignore ที่มีไฟล์ gitignore สำหรับภาษาและสภาพแวดล้อมการพัฒนาที่หลากหลาย: github.com/github/gitignore
Ryan Lundy

47

คุณจะติดแท็กชุดการแก้ไขเฉพาะอย่างไร

คุณ 'ทำเครื่องหมาย' 'แท็ก' หรือ 'ปล่อย' ชุดการแก้ไขเฉพาะสำหรับไฟล์ชุดใดชุดหนึ่งเพื่อให้คุณสามารถดึงชุดนั้นได้ในภายหลัง?

การใช้git tagคำสั่ง

หากต้องการ "ติดแท็ก" การแก้ไขปัจจุบันคุณเพียงเรียกใช้ ..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

หากต้องการแสดงแท็กปัจจุบันเพียงแค่รันgit tagโดยไม่มีอาร์กิวเมนต์หรือ-l(ตัวพิมพ์เล็ก L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

ในการลบแท็กคุณใช้การ-dตั้งค่าสถานะ:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

ในการแท็กการมอบหมาย (ก่อนหน้า) ที่เจาะจงคุณทำได้ง่ายๆ ..

git tag [tag name] [revision SHA1 hash]

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

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

หมายเหตุ: โดยค่าเริ่มต้น git จะสร้างแท็ก "lightweight" (โดยทั่วไปจะอ้างอิงถึงการแก้ไขเฉพาะ) วิธี "ขวา" คือการใช้-aธง สิ่งนี้จะเรียกใช้ตัวแก้ไขของคุณเพื่อขอข้อความแท็ก (เหมือนกับการขอข้อความยืนยันคุณยังสามารถใช้การ-mตั้งค่าสถานะเพื่อให้ข้อความแท็กในบรรทัดคำสั่ง) การใช้แท็กที่ทำหมายเหตุประกอบไว้จะสร้างวัตถุที่มี ID, วันที่, ตัวทำแท็ก (ผู้เขียน) ของตัวเองและเลือกลายเซ็น GPG (โดยใช้-sแท็ก) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ดูโพสต์นี้

git tag mytagwithmsg -a -m 'This is a tag, with message'

และในการแสดงรายการแท็กที่มีคำอธิบายประกอบให้ใช้-n1แฟล็กเพื่อแสดง 1 บรรทัดของข้อความแต่ละแท็ก ( -n245เพื่อแสดง 245 บรรทัดแรกของแต่ละคำอธิบายประกอบและอื่น ๆ ):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

สำหรับข้อมูลเพิ่มเติมดูที่git-tag (1) หน้าคู่มือ


แท็ก git ไม่ได้สร้างแท็กโดยค่าเริ่มต้นเพียงการอ้างอิงที่มีน้ำหนักเบา คุณต้องใช้ -a หรือ -s เพื่อสร้างแท็กวัตถุ (ซึ่งสิ่งต่าง ๆ ที่อธิบายจะใช้): rockstarprogrammer.org/post/2008/oct/16/…
Dustin

อ่าน่าสนใจ ขอขอบคุณฉันได้อัปเดตคำตอบเพื่อสะท้อนถึงสิ่งนี้แล้ว
dbr

และคุณติดแท็กการแก้ไขที่มุ่งมั่นไว้ก่อนหน้านี้อย่างไร (ขออภัยมันยาวเกินไปดังนั้นฉันไขมันต่ำผ่านไม่ฉันพลาดอะไร?)
Hasen

เจ hasen: เพิ่มข้อมูลที่จะตอบโดยทั่วไปgit tag tagname revision_SHA1
DBR

1
ในการพุชแท็กลงใน repo ระยะไกลให้เพิ่ม - แท็กเมื่อใช้ git push (ข้อมูลจากส่วนช่วยเหลือ github)
Héctor Ramos

46

ตัวอย่างขั้นตอนการทำงานกับ GIT

Git มีความยืดหยุ่นสูงและปรับให้เหมาะกับเวิร์กโฟลว์ใด ๆ แต่การบังคับใช้เวิร์กโฟลว์เฉพาะอาจมีผลกระทบเชิงลบทำให้ยากที่จะเข้าใจว่าคุณสามารถทำอะไรกับ git นอกเหนือจากเวิร์กโฟลว์ "สำรอง" เชิงเส้นและวิธีการแยกสาขาที่มีประโยชน์ .

โพสต์บล็อกนี้อธิบายเวิร์กโฟลว์ที่เรียบง่าย แต่มีประสิทธิภาพซึ่งง่ายต่อการติดตั้งโดยใช้ git

การอ้างอิงจากบล็อกโพสต์: เราถือว่า Origin / master เป็นสาขาหลักที่ซอร์สโค้ดของ HEAD จะแสดงสถานะพร้อมใช้งานจริงเสมอ:

เวิร์กโฟลว์ได้รับความนิยมมากพอที่จะทำโครงการที่ใช้เวิร์กโฟลว์นี้: git-flow

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

เวิร์กโฟลว์ง่าย

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

ในระหว่างกระบวนการทั้งหมดนี้คุณจะพบข้อบกพร่องด้านความปลอดภัยที่น่ากลัวซึ่งจะต้องได้รับการแก้ไขทันที คุณอาจมีสาขาที่เรียกว่าโปรแกรมแก้ไขด่วนซึ่งทำการเปลี่ยนแปลงที่จะผลักดันให้กลับเข้าสู่การผลิตได้เร็วกว่าสาขา "พัฒนา" ปกติ

ที่นี่คุณมีภาพประกอบว่าเวิร์กโฟลว์คุณลักษณะ / โปรแกรมแก้ไขด่วน / พัฒนา / การผลิตนี้มีลักษณะอย่างไร (อธิบายได้ดีในโพสต์บล็อกและฉันทำซ้ำโพสต์บล็อกอธิบายกระบวนการทั้งหมดในรายละเอียดมากขึ้นและดีกว่าฉันมาก .

ตัวอย่างเวิร์กโฟลว์ Git


ฉันเป็นมือใหม่คอมไพล์และแผนภาพนี้ทำให้ฉันสับสนมากขึ้น
finnw

อันไหนอันไหนอันแรกหรืออันสุดท้าย? ฉันไม่ต้องการทำให้โพสต์ยาวเกินไป แต่ฉันจะเพิ่มคำอธิบายเล็ก ๆ ของไดอะแกรมทั้งสองในภายหลัง
ashwoods

อ่านบทความเต็ม ฉันสับสนด้วยแผนภาพนี้เช่นกัน แต่โพสต์บล็อกเขียนได้ดีมากnvie.com/posts/a-successful-git-branching-model
Felipe Sabino

ตอนนี้มันดีกว่าไหม? ฉันแค่อยากจะ qive ภาพรวมคร่าวๆไม่ repost โพสต์บล็อกทั้งหมดที่นี่ :)
ashwoods

39

นี่คือสำเนาของโพสต์ของ PJ Hyett เนื่องจากไม่สามารถใช้งานได้อีกต่อไป:

Git ไม่ยาก

23 พ.ย. 2551

เมื่อเราบอกผู้คนว่าทำไมพวกเขาถึงควรใช้ Git มากกว่าการโค่นล้มผู้ที่เข้าร่วมคือ“ Git ทำการโค่นล้มได้ดีกว่าการโค่นล้ม แต่มันก็ทำมากกว่านั้น”

"มากขึ้น" ประกอบด้วยสิ่งต่าง ๆ มากมายที่ทำให้ Git เปล่งประกายจริงๆ แต่มันก็ค่อนข้างล้นหลามสำหรับผู้ที่มาจาก SCM คนอื่น ๆ เช่นการโค่นล้ม

ที่กล่าวว่าไม่มีอะไรหยุดคุณจากการใช้ Git เหมือนกับที่คุณใช้การโค่นล้มในขณะที่คุณกำลังทำการเปลี่ยนแปลง

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

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

และคุณจะทำอย่างไรใน Git:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

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

ดูสิมันไม่ยากอย่างนั้น

อัปเดต:ฉันจะไม่ต้องพูดถึงว่าการอัปเดตสำเนาภายในเครื่องของคุณในการโค่นล้มเมื่อเทียบกับ Git คือsvn updateและ git pullตามลำดับ คำสั่งเดียวเท่านั้นในทั้งสองกรณี


ในตัวอย่างแรกฉันเห็นว่าคุณกำลังเช็คเอาท์ไปยังเส้นทางสัมพัทธ์./fooแต่ไม่มีเส้นทางที่ระบุไว้สำหรับ get clone แม้ว่าคุณจะเช็คเอาท์ที่ไหน?
JD Isaacks

33

วิธีการติดตั้ง Git

บน Windows:

ติดตั้งmsysgit

มีหลายดาวน์โหลด:

  • Git:ใช้สิ่งนี้หากคุณไม่ต้องการตัวเลือกใดตัวเลือกหนึ่งด้านล่าง
  • PortableGit:ใช้สิ่งนี้หากคุณต้องการเรียกใช้ Git บนพีซีโดยไม่ต้องติดตั้งบนพีซีนั้น (เช่นใช้ Git จากไดรฟ์ USB)
  • msysGit:ใช้สิ่งนี้หากคุณต้องการพัฒนา Git เอง หากคุณต้องการใช้ Git สำหรับซอร์สโค้ดของคุณแต่ไม่ต้องการแก้ไขซอร์สโค้ดของ Gitคุณไม่จำเป็นต้องใช้สิ่งนี้

สิ่งนี้จะติดตั้ง Cygwin bash shell เพื่อให้คุณสามารถใช้gitใน nicer shell (มากกว่า cmd.exe) และยังรวมถึง git-gui (เข้าถึงได้ผ่านgit guiคำสั่งหรือStart > All Programs > Gitเมนู)

Mac OS X

ใช้git-osx-installerหรือคุณสามารถติดตั้งจากแหล่งที่มา

ผ่านผู้จัดการแพคเกจ

ติดตั้งgitโดยใช้ตัวจัดการแพ็คเกจดั้งเดิมของคุณ ตัวอย่างเช่นบน Debian (หรือ Ubuntu):

apt-get install git-core

หรือบน Mac OS X ผ่านMacPorts :

sudo port install git-core+bash_completion+doc

…หรือตำรวจ:

fink install git

…หรือHomebrew :

brew install git

สำหรับ Red Hat based distributions เช่น Fedora:

yum install git

ใน Cygwin แพ็คเกจ Git สามารถพบได้ในส่วน "devel"

จากแหล่งที่มา (Mac OS X / Linux / BSD / ฯลฯ )

ใน Mac OS X หากคุณมีเครื่องมือสำหรับนักพัฒนาติดตั้งคุณสามารถรวบรวม Git จากแหล่งได้อย่างง่ายดาย ดาวน์โหลด Git เวอร์ชันล่าสุดจาก.tar.bzหรือ.tar.gzจากhttp://git-scm.com/และแตกไฟล์ (ดับเบิลคลิกใน Finder)

บน Linux / BSD / ฯลฯ มันควรจะเหมือนกันมาก ยกตัวอย่างเช่นใน Debian (และอูบุนตู), คุณจำเป็นต้องติดตั้งแพคเกจผ่านbuild-essentialapt

จากนั้นในเทอร์มินัลcdไปยังที่ที่คุณแตกไฟล์ (กำลังทำงานcd ~/Downloads/git*/ควรจะทำงาน) แล้วรัน ..

./configure && make && sudo make install

สิ่งนี้จะติดตั้ง Git เป็นตำแหน่งเริ่มต้น ( /usr/local- gitจะอยู่ใน/usr/local/bin/git)

มันจะแจ้งให้คุณป้อนรหัสผ่านของคุณ (สำหรับsudo) นี่คือเพื่อให้สามารถเขียนไปยัง/usr/local/ไดเรกทอรีซึ่งสามารถเข้าถึงได้โดยผู้ใช้ "root" เท่านั้นดังนั้นต้องใช้ sudo!

หากคุณต้องการติดตั้งที่อื่น (เพื่อไม่ให้ไฟล์ของ Git ผสมกับเครื่องมืออื่น) ให้ใช้--prefixกับคำสั่ง configure:

./configure --prefix=/usr/local/gitpath
make
sudo make install

สิ่งนี้จะติดตั้งgitไบนารีลงใน/usr/local/bin/gitpath/bin/git- ดังนั้นคุณไม่จำเป็นต้องพิมพ์สิ่งนั้นทุกครั้งที่คุณควรเพิ่มเข้าไป$PATHโดยเพิ่มบรรทัดต่อไปนี้ใน~/.profile:

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

หากคุณไม่มีสิทธิ์เข้าถึง sudo คุณสามารถใช้--prefix=/Users/myusername/binและติดตั้งลงในโฮมไดเร็กตอรี่ของคุณได้ อย่าลืมเพิ่ม~/bin/เพื่อ$PATH

สคริปต์x-git-update-to-latest-version จะทำสิ่งนี้โดยอัตโนมัติเป็นจำนวนมาก:

สคริปต์นี้อัพเดตโคลนโลคัลของฉันของ git repo (localy at ~/work/track/git) จากนั้นกำหนดค่าติดตั้ง (at /usr/local/git- git describe) และอัพเดต/usr/local/gitsymlink

ด้วยวิธีนี้ฉันสามารถมี/usr/local/git/binในของฉันPATHและฉันมักจะใช้รุ่นล่าสุด

เวอร์ชันล่าสุดของสคริปต์นี้ยังติดตั้ง man pages คุณต้องปรับแต่งของคุณMANPATHเพื่อรวม/usr/local/git/share/manไดเรกทอรี


5
บน yum install gitFedora: yum install git-guiสำหรับการทำงานแบบ GUI
Cristian Ciupitu

2
บน Mac,sudo port install git-core+bash_completion+doc
Singletoned

ฉันดาวน์โหลด fink สำหรับ mac แต่การติดตั้ง gink ของ fink ทำให้ฉันเกิดข้อผิดพลาด: "ล้มเหลว: ไม่พบแพ็คเกจสำหรับข้อมูลจำเพาะ 'git'!"
quano

@quano มันควรจะอยู่ที่นั่น, pdb.finkproject.org/pdb/package.php/git - ตรวจสอบว่าตำรวจอัปเดตอย่างถูกต้องแล้ว - ฉันคิดว่าการรันน่าfink self-updateจะช่วยได้
dbr

32

รีเซ็ต Git

สมมติว่าคุณทำการดึงรวมเข้ากับรหัสของคุณและตัดสินใจว่าคุณไม่ชอบ ใช้ git-log หรือ tig และค้นหาแฮชของที่ใดก็ตามที่คุณต้องการกลับไปที่ (อาจเป็นคำสั่งสุดท้ายก่อนที่จะทำการดึง / รวม) คัดลอกแฮชและทำ:

# Revert to a previous commit by hash:
git-reset --hard <hash>

แทนที่จะใช้แฮชคุณสามารถใช้HEAD ^เป็นทางลัดสำหรับการคอมมิชชันก่อนหน้า

# Revert to previous commit:
git-reset --hard HEAD^

4
นี่เป็นระบบอะนาล็อกในการแปลงกลับในระบบควบคุมรุ่นอื่น ๆ
เจเรมีกำแพง

"$ git-reset - hard HEAD ^" ควรจดชวเลขสำหรับผู้ปกครองของหัว (เช่นสถานะก่อนหน้านี้ก่อนที่จะยอมรับครั้งล่าสุด)
เบ็นหน้า

6
คนแก่ธรรมดาเท่านั้นที่git resetไม่ควรหยุดทำงานโดยไม่ได้ตั้งใจgit add
slf

31

คุณจะตั้งค่าที่เก็บทีมที่ใช้ร่วมกันได้อย่างไร?

วิธีการตั้งค่าที่เก็บปกติอธิบายไว้ที่นี่ - แต่คุณจะตั้งค่าที่เก็บทีมอย่างไรให้ทุกคนสามารถดึงและดันจากและไปที่

การใช้ระบบไฟล์ NFS แบบแบ่งใช้

สมมติว่าทีมของคุณมีสมาชิกกลุ่มที่แชร์แล้วซึ่งสามารถใช้ได้

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

ในการเริ่มใช้ที่เก็บนี้สิ่งที่ง่ายที่สุดคือเริ่มจากที่เก็บในเครื่องที่คุณใช้อยู่แล้ว:

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

ขณะนี้คนอื่นสามารถโคลนสิ่งนี้และเริ่มทำงาน:

cd your/local/workspace
git clone /your/share/folder/project.git

ใช้ SSH

ตั้งค่าบัญชีผู้ใช้บนเซิร์ฟเวอร์เป้าหมาย ไม่ว่าคุณจะใช้บัญชีที่ไม่มีรหัสผ่านบัญชีที่ใช้รหัสผ่านหรือใช้authorized_keysขึ้นอยู่กับระดับความปลอดภัยที่คุณต้องการ ดูการกำหนดค่า Git บน SSHเพื่อดูข้อมูลเพิ่มเติม

หากนักพัฒนาทั้งหมดใช้บัญชีเดียวกันสำหรับการเข้าถึงที่เก็บข้อมูลที่ใช้ร่วมกันนี้คุณไม่จำเป็นต้องใช้--sharedตัวเลือกดังกล่าวข้างต้น

หลังจากสร้างที่เก็บข้อมูลด้วยวิธีเดียวกับด้านบนคุณจะเริ่มต้นกดดังนี้:

cd your/local/workspace/project
git remote add origin user@server:/path/to/project.git
git push origin master

เห็นความคล้ายคลึงกันกับข้างต้นหรือไม่ สิ่งเดียวที่อาจเกิดขึ้นนอกเหนือจากนี้คือ SSH เพื่อขอรหัสผ่านหากบัญชีมีรหัสผ่าน ถ้าคุณได้รับพรอมต์นี้ในบัญชีโดยไม่ต้องใช้รหัสผ่านเซิร์ฟเวอร์ SSH PermitEmptyPasswordsอาจจะมีคนพิการ

การโคลนตอนนี้มีลักษณะดังนี้:

cd your/local/workspace
git clone user@server:/path/to/project.git

นอกเหนือจาก NFS - คุณจะตั้งค่าเซิร์ฟเวอร์ git ให้ทำงานกับ ssh ได้อย่างไร? - เช่นเดียวกับตัวอย่างเล็ก ๆ ของ github.com
Dafydd Rees

จำเป็นหรือไม่ที่จะต้องมีการตั้งค่ากลุ่มบิตเหนียว ๆ ในไดเรกทอรีที่เกี่ยวข้องหรือ git ดูแลสิ่งนั้นทั้งหมด ถ้าอย่างหลัง git รู้ได้อย่างไรว่ากลุ่มใดบ้างที่จะใช้ในการอนุญาตสำหรับไฟล์ Unix
นอร์แมนแรมซีย์

ฉันได้เพิ่มหัวข้อใน SSH ตามที่ร้องขอ ต้องการหมุดเล็กน้อยหากนักพัฒนาซอฟต์แวร์บางคนไม่มีกลุ่มที่ใช้ร่วมกันเป็นกลุ่มหลัก หากผู้ใช้คนใดมีกลุ่มหลักที่แตกต่างกันพวกเขาจะสร้างไฟล์ที่มีความเป็นเจ้าของกลุ่มนี้เป็นค่าเริ่มต้น สิ่งนี้เกิดขึ้นใต้ git และไม่ได้อยู่ในการควบคุมของ git เสมอไป
Asgeir S. Nilsen

สิ่งที่กลุ่มgit repo-config core.sharedRepositoryมีประโยชน์สำหรับ?
systempuntoout

28

git statusเป็นเพื่อนของคุณใช้บ่อย เหมาะสำหรับตอบคำถามเช่น:

  • คำสั่งนั้นทำอะไร
  • ฉันอยู่สาขาอะไร
  • ฉันกำลังเปลี่ยนแปลงอะไรที่ต้องทำและฉันลืมอะไรไปแล้ว?
  • ฉันอยู่ตรงกลางของสิ่งที่ฉันทำในโครงการนี้ครั้งล่าสุด (วันสัปดาห์หรือเดือนที่ผ่านมา)?

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

เห็นได้ชัดว่ามันมีประโยชน์มากขึ้นหาก. gitignore ของคุณได้รับการกำหนดค่าอย่างเหมาะสม


27

กระทำการเปลี่ยนแปลง

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

$ git commit source/main.c

จะคอมมิตไฟล์ main.c ในไดเรกทอรี. /source/

$ git commit -a # the -a flag pulls in all modified files

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

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

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

สำหรับคนที่มาจาก CVS หรือ SVN นี่คือการเปลี่ยนแปลงเนื่องจากการกระทำที่เก็บข้อมูลส่วนกลางตอนนี้ต้องใช้สองขั้นตอน


27

คุณจะแตกสาขาได้อย่างไร

masterสาขาเริ่มต้นในพื้นที่เก็บข้อมูลที่เรียกว่าคอมไพล์

เพื่อสร้างการใช้งานสาขาใหม่

git branch <branch-name>

เพื่อดูรายการของสาขาทั้งหมดในประเภทที่เก็บปัจจุบัน

git branch

หากคุณต้องการเปลี่ยนเป็นสาขาอื่นคุณสามารถใช้

git checkout <branch-name>

เพื่อสร้างสาขาใหม่และเปลี่ยนเป็นสาขาในขั้นตอนเดียว

git checkout -b <branch-name>

หากต้องการลบสาขาให้ใช้

git branch -d <branch-name>

หากต้องการสร้างสาขาที่มีการเปลี่ยนแปลงจากสาขาปัจจุบันให้ทำ

git stash
git stash branch <branch-name>

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

21

รับรหัสล่าสุด

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

ที่ครอบคลุมทุกกรณีเพื่อรับสำเนาล่าสุดของรหัสจากที่เก็บระยะไกล



18

Git Magicคือทุกสิ่งที่คุณต้องการ รับประกันหรือคืนเงินของคุณ!


14
ถอนหายใจฉันต้องการเงินคืน ซอฟต์แวร์ Buggy (msysGit) ที่มีการสอนที่ไม่สมบูรณ์ (GitMagic) == ชั่วโมงของการทำงานซึ่งแทบจะฟรี
SamGoody

16

คุณจะรวมสาขาได้อย่างไร

หากคุณต้องการที่จะผสานสาขา (เช่นmasterการrelease) ให้แน่ใจว่าสาขาปัจจุบันของคุณสาขาเป้าหมายที่คุณต้องการที่จะผสานเข้า (ใช้git branchหรือgit statusเพื่อดูสาขาปัจจุบันของคุณ)

จากนั้นใช้

git merge master

(ซึ่งmasterเป็นชื่อของสาขาที่คุณต้องการผสานกับสาขาปัจจุบัน)

หากมีข้อขัดแย้งใด ๆ คุณสามารถใช้

git diff

เพื่อดูความขัดแย้งที่รอดำเนินการที่คุณต้องแก้ไข


2
มี mergetool คอมไพล์ที่ไม่สามทาง-diff ด้วยเครื่องมือที่คุณชื่นชอบ (gvimdiff, kdiff3 หรือมากกว่าบางคน) คือ
เดฟโฟกท์

16

ฉันพบว่าGit Internalsนั้นมีประโยชน์มาก มันเขียนโดย Scott Chacon (ผู้แต่ง Pro Git และผู้ดูแลหนังสือชุมชน Git) สิ่งที่ฉันชอบเกี่ยวกับ Git Internals คือมันมุ่งเน้นไปที่แนวคิดก่อนแล้วจึงออกคำสั่งและการที่มันเป็น ~ 100 หน้าเล็กมันย่อยได้อย่างรวดเร็ว



12

วิธีติดตามสาขาระยะไกล

สมมติว่ามีที่เก็บแบบรีโมตที่คุณโคลนที่เก็บแบบโลคัลของคุณจากและสมมติว่ามีสาขาชื่อ 'some_branch' บนที่เก็บแบบรีโมตนั้นนี่คือวิธีติดตามแบบโลคัล:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push

ดูเหมือนว่าในสาขา 1.7 git ระยะไกลได้รับการติดตามโดยอัตโนมัติเมื่อคุณสร้างสาขาท้องถิ่นจากพวกเขา ฉันไม่ทราบว่าพฤติกรรมนี้เริ่มต้นในเวอร์ชันใด
Doppelganger

ที่จริงแล้วคุณสามารถแสดงรายการสาขาระยะไกลทั้งหมดได้โดยใช้git remote show REMOTENAME
เฟลิเป้ซาบิโน

11

กระดาษที่ดีจริงสำหรับการทำความเข้าใจวิธีการทำงานของ Git เป็นGit อุปมา แนะนำมาก!


10

คุณจะเปรียบเทียบการแก้ไขสองไฟล์หรือไฟล์ปัจจุบันของคุณกับการแก้ไขก่อนหน้าได้อย่างไร

git diffคำสั่งเปรียบเทียบคือ

ในการเปรียบเทียบการแก้ไข 2 ไฟล์:

$ git diff <commit1> <commit2> <file_name>

สิ่งนั้นแตกต่าง commit1 กับ commit2; หากคุณเปลี่ยนลำดับไฟล์จะมีการกระจายไปในทางอื่นซึ่งอาจไม่ใช่สิ่งที่คุณคาดหวัง ...

หากต้องการเปรียบเทียบไฟล์ staged ปัจจุบันกับที่เก็บ:

$ git diff --staged <file_name>

วิธีเปรียบเทียบไฟล์ที่ไม่จัดเก็บปัจจุบันกับที่เก็บ:

$ git diff <file_name>

9

ทำไมถึงเป็นเช่นนั้นอีก? มีคนที่ดีจริงๆในเน็ตเช่นคู่มือ gitที่เหมาะสำหรับการเริ่มต้น มีลิงค์ที่ดีรวมถึงหนังสือ gitที่สามารถมีส่วนร่วม (โฮสต์บน git hub) และเหมาะสำหรับงานรวมนี้

ใน stackoverflow ฉันชอบที่จะเห็นเทคนิคที่คุณชื่นชอบ!

ของฉันที่ฉันค้นพบเมื่อไม่นานมานี้คือgit stashอธิบายที่นี่ซึ่งช่วยให้คุณสามารถบันทึกงานปัจจุบันของคุณและไปที่สาขาอื่น

แก้ไข: เป็นโพสต์ก่อนหน้านี้ถ้าคุณชอบรูปแบบสแต็คโอเวอร์ต่ำที่มีโพสต์เป็นวิกิฉันจะลบคำตอบนี้


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

9

UI คอนโซล - Tig

การติดตั้ง:

apt-get install tig

การใช้

ในขณะที่อยู่ใน git repo ให้พิมพ์ 'tig' เพื่อดูบันทึกการโต้ตอบกด 'Enter' บนบันทึกใด ๆ เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับมัน hเพื่อขอความช่วยเหลือซึ่งจะแสดงรายการฟังก์ชั่นพื้นฐาน

เรื่องไม่สำคัญ

"Tig" คือ "Git" ย้อนหลัง


ไม่ควรเป็น "คอนโซล UI" เนื่องจาก "คอนโซล" และ "กราฟิก" เป็นบิต .. ขัดแย้งหรือไม่
dbr

มันมีกราฟิกมากกว่า git-log มากกว่า ... อย่างไรก็ตามมันสามารถเชื่อมต่อได้มากขึ้น ...
Dean Rather

8

ฉันจะสร้างสาขาบนที่เก็บระยะไกลได้อย่างไร

สมมติว่าคุณได้โคลนที่เก็บระยะไกลของคุณจากที่เก็บระยะไกลเดียว

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

11
ทำไมต้อง name_of_branch: name_of_branch
Seun Osewa

ใช่ทำไม? เท่าที่ฉันรู้ว่าคุณต้องการเพียงgit push origin name_of_branchและสาขาจะถูกสร้างขึ้นในระยะไกลของคุณ
เฟลิเป้ซาบิโน

ที่แรกname_of_branchคือชื่อท้องถิ่นที่สองคือชื่อสาขาระยะไกล (ที่ต้องการ) ดังนั้นมันอาจจะเป็นlocal_name_of_branch:remote_name_of_branchถ้าคุณต้องการชื่อที่แตกต่างกัน หากคุณต้องการพวกเขาเหมือนกันคุณยังต้องระบุเช่นนี้ b / c git ไม่ได้ทำให้สันนิษฐานว่าคุณต้องการชื่อที่จะเหมือนกันจนกว่าคุณจะบอกมัน (มีวิธีอื่นที่จะทำเช่นกัน อย่างไรก็ตาม)
johnny

8

ฉันได้เริ่มต้นอย่างเป็นทางการGit กวดวิชา ฉันคิดว่ามันใช้งานได้ดีพอสำหรับผู้เริ่มต้น (ฉันเป็นและยังเป็นผู้เริ่มต้นตามคำนิยามของคุณ! ฉันแทบจะเข้าใจ makefiles ฉันเพิ่งเล่นเพียงเล็กน้อยกับ Apache Subversion และอื่น ๆ )


8

ฉันจะลบสาขาในที่เก็บระยะไกลได้อย่างไร

ทำการพุชในรีโมตของคุณโดยใช้:ก่อนชื่อของสาขา

git push origin :mybranchname

เป็นoriginชื่อรีโมตของคุณและmybranchnameชื่อสาขาที่จะถูกลบ

http://help.github.com/remotes/


7

ผลักและดึงการเปลี่ยนแปลง

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

เมื่อคุณกดไปที่ที่เก็บระยะไกลเป็นครั้งแรกคุณต้องทำgit push origin master(ต้นแบบเป็นสาขาหลัก) git pushจากนั้นคุณก็ทำ

git push --tagsแท็กผลักดันด้วย


7

ตรวจสอบรหัส

ก่อนอื่นให้ไปที่ dir ที่ว่างเปล่าใช้ "git init" เพื่อทำให้มันเป็นที่เก็บข้อมูลจากนั้นโคลน repo ระยะไกลเป็นของคุณเอง

git clone user@host.com:/dir/to/repo

ไม่ว่าคุณจะทำการโคลนจากที่ไหนคือ "git pull" โดยค่าเริ่มต้น


7
ฉันคิดว่าการโคลนนิ่งทำตามขั้นตอนเริ่มต้นสำหรับคุณแล้วไม่จำเป็นต้องเรียกใช้ init ก่อน git init นั้นส่วนใหญ่แล้วจะสร้างที่เก็บข้อมูลแรกหรือสำหรับการกำหนดค่าพิเศษที่มีรีโมตหลายตัวที่คุณต้องการตั้งค่าที่แตกต่างจากโคลนมาตรฐาน
Jeremy Wall

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