จาก TFS ถึง Git


14

ฉันเป็นผู้พัฒนา. NET และฉันใช้ TFS (เซิร์ฟเวอร์พื้นฐานสำหรับทีม) เป็นซอฟต์แวร์ควบคุมซอร์สของฉันหลายครั้ง คุณสมบัติที่ดีของ TFS คือ:

  1. การรวมที่ดีกับ Visual Studio (ดังนั้นฉันทำเกือบทุกอย่างที่มองเห็นไม่มีคำสั่งคอนโซล)
  2. เช็คเอาท์ง่ายกระบวนการเช็คอิน
  3. การผสานและการแก้ไขข้อขัดแย้งได้ง่าย
  4. สร้างอัตโนมัติง่าย
  5. การแตกแขนง

ตอนนี้ฉันต้องการใช้ Git เป็นตัวควบคุมพื้นที่เก็บข้อมูลและแหล่งที่มาของโครงการโอเพ่นซอร์สของฉัน โครงการของฉันอยู่ในภาษา C #, JavaScript หรือ PHP ที่มีฐานข้อมูล MySQL หรือ SQL Server เป็นกลไกการจัดเก็บ

ฉันเพิ่งใช้ความช่วยเหลือของ github.com เพื่อจุดประสงค์นี้และฉันสร้างโปรไฟล์ที่นั่นและดาวน์โหลด GUI สำหรับ Git ในส่วนนี้นั้นง่ายมาก

แต่ฉันเกือบติดอยู่อีกต่อไป ฉันแค่ต้องการดำเนินการง่ายๆ (ง่ายจริงๆ) รวมถึง:

  1. การสร้างโครงการบน Git และทำแผนที่ไปยังโฟลเดอร์บนแล็ปท็อปของฉัน
  2. การตรวจสอบ / ตรวจสอบในไฟล์และโฟลเดอร์
  3. การแก้ไขข้อขัดแย้ง

นั่นคือทั้งหมดที่ฉันต้องทำตอนนี้ แต่ดูเหมือนว่า GUI นั้นไม่เป็นมิตรกับผู้ใช้ ฉันคาดหวังว่า GUI จะมีConnect To...สิ่งใดสิ่งหนึ่งจากนั้นฉันคาดว่าจะมีรายการโครงการที่จะแสดงและเมื่อฉันเลือกโครงการหนึ่งฉันคาดว่าจะเห็นรายการไฟล์และโฟลเดอร์ของโครงการนั้นเช่นเดียวกับการสำรวจโครงการ TFS ของคุณ ใน Visual Studio จากนั้นฉันต้องการคลิกขวาที่ไฟล์และเลือกcheck-in...หรือcheck-outและสิ่งนั้น

ฉันคาดหวังมากไหม ฉันควรทำอย่างไรเพื่อใช้ Git ง่าย ๆ เช่นเดียวกับ TFS ฉันหายไปนี่อะไร


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

14
ทำไมคน windows จึงหมกมุ่นเกี่ยวกับอินเตอร์เฟซแบบกราฟิก?
tdammers

8
@tdammers เพราะบรรทัดคำสั่งบน Windows แย่เหมือนนรกใช่ไหม ฉันรู้ว่ามี PowerShell แต่พวกเขาใช้หรือไม่
maaartinus

3
@Seed สำหรับการเริ่มต้นคุณคาดหวังว่าจะมีสิ่งต่าง ๆ เช่นการตรวจสอบไฟล์เข้าและออกในคอมไพล์ VCS ที่ใช้งานไม่ได้มีมานานหลายปีแล้ว
Daniel Roseman

1
อ่านแนะนำ: ericsink.com/entries/vcbe_print_edition_free.htmlมันอธิบายพื้นฐานของการควบคุมเวอร์ชันและความแตกต่างระหว่างการรวมศูนย์และการกระจายอำนาจ (ที่ยังคงสามารถใช้เซิร์ฟเวอร์กลางใจ)
Inca

คำตอบ:


19

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

หากคุณกำลังจะเปลี่ยนจากสิ่งอื่นเป็นคอมไพล์ลองเริ่ม tabula-rasa (แม้ว่ามันจะเป็นไปไม่ได้ที่จะทำในทางปฏิบัติจริงๆ) ประเมินว่ามันขึ้นอยู่กับสิ่งที่มันทำและวิธีการที่ดีมันไม่ได้เป็นอย่างไรเมื่อเทียบกับวิธีที่คุณคุ้นเคยกับมัน ไม่ใช่ว่าคุณคาดหวังมากเกินไปมันเป็นความคาดหวังของคุณที่มีมุมฉากกับสิ่งที่มีอยู่ในคอมไพล์ หากคุณแต่งงานกับการใช้งาน GUI คุณจะผิดหวัง Git มีเครื่องมือ gui ให้ใช้งาน แต่ไม่มีอะไรเพิ่มมากนัก นั่นไม่ใช่ความล้มเหลวที่จะให้พวกเขามากพอ ๆ กับที่ gui สามารถเพิ่มได้ GitK ช่วยไม่ได้ในการดำเนินงานแบบวันต่อวัน แต่ในการแสดงโครงสร้างของสาขาและการตรวจสอบหรือค้นหาประวัติ

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


อ๊ะฉันลืมอธิบายการแก้ไข ฉันเพิ่งเพิ่มย่อหน้าสุดท้ายหลังจากลุกขึ้นเพื่อดื่มกาแฟเพิ่มและมีป๊อปอัพที่คล้ายคลึงกันในหัวของฉัน
kylben

3
ชอบคำอุปมาในตอนท้าย +1
Yam Marcovic

7

คุณคิดว่าเป็น Mercurial หรือไม่? เช่นเดียวกับ git เป็น DCVS และให้คุณทำทุกอย่างที่เรียบร้อยด้วย DCVS เช่นเดียวกับ git มีผู้ให้บริการคลาวด์ (bitbucket) ที่ค่อนข้างดี แต่ไม่เหมือนกับ git เรื่องราวของ windows นั้นค่อนข้างดีคุณไม่ใช่พลเมืองชั้นสอง คุณมีตัวเลือกเครื่องมือที่ดี (TortiseHG) และการรวม Visual Studio ที่ค่อนข้างดี (VisualHG)

ไม่มีอะไรจะเป็นเหมือน TFS ในสตูดิโอภาพ แต่โลกก็ไม่ได้เชื่อมต่อแบบนั้น


1
ฉันเห็นด้วยไม่กี่ปีที่ผ่านมาฉันย้ายจาก VSS ไปยัง Mercurial และมันเป็นความศักดิ์สิทธิ์ที่แท้จริง ทันใดนั้นฉันสามารถทำสิ่งที่ฉันไม่เคยคิดว่าจะเป็นจริง จากนั้นผมก็ย้ายไปและจำนวนมากของสิ่งที่เป็นเพียงเพื่อให้ง่ายในการพลาดsvn hgตอนนี้ฉันย้ายไปgitและมีความรู้สึกผสม ฉันรักที่ได้รับกลับมามากของสิ่งอำนวยความสะดวกเหล่านั้นฉันพลาดในsvnแต่ฉันยังคงคิดถึงความเรียบง่ายของเมื่อเทียบกับความซับซ้อนที่ไม่จำเป็นของhg gitแม้เพียงแค่ติดตั้งTortoiseGitใน Windows คุณจะต้องกระโดดผ่านห่วงที่ก็ไม่จำเป็นต้องมีTortoiseHg
Mark Booth

@ Mark บูธ: ฉันยอมรับว่าคอมไพล์ไม่ได้ใช้งานง่ายมาก แต่สิ่งที่ซับซ้อนไม่จำเป็น ? ปัญหาการติดตั้งไม่นับรวมพวกเขาอาจมาจาก TortoiseGit (ซึ่งเป็นโปรแกรมอื่น) หรือกับ Windows
maaartinus

สิ่งนี้จะดีกว่าในการแชท แต่ฉันไม่เห็นว่าต้องการพื้นที่ทำดัชนี / แคช / การจัดเตรียมใด ๆ IMHO ค่าเริ่มต้นควรจะคอมมิชชันทุกอย่างด้วยตัวเลือกบางส่วนถ้าร้องขอ (ยังดีกว่า ไม่ต้องการทันทีดำเนินการทดสอบหน่วยของคุณอีกครั้งยอมรับและยกเลิกการสิบสอง) ฉันเกลียดที่จะต้องสร้างสาขาใหม่เมื่อฉันต้องการ ด้วย hg สาขาที่ไม่มีชื่อจะถูกสร้างขึ้นอย่างเงียบ ๆ เมื่อใดก็ตามที่คุณให้สัญญากับหัวหน้าที่ไม่ใช่ ในคอมไพล์ถ้าคุณย้ายออกไปจากหัวโดยไม่แยกคุณอาจสูญเสียมันแล้วมีขยะเก็บ!
Mark Booth

6

ฉันเปลี่ยนจาก SVN เป็น git เมื่อหนึ่งปีที่แล้วและฉันมีความสุขมาก อย่างไรก็ตามฉันไม่ได้พึ่ง GUI ใด ๆ และในกรณีที่คุณปฏิเสธบรรทัดคำสั่งอย่างเข้มงวดอาจเป็นปัญหาได้

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

การสร้างโครงการบน Git และทำแผนที่ไปยังโฟลเดอร์บนแล็ปท็อปของฉัน

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

ฉันมักจะเริ่มต้นด้วยการสร้างไดเรกทอรีว่างแล้วอย่างใดอย่างหนึ่ง git initgit clone SOME-REMOTE-REPOSITORYหรือ ลิงค์นี้สามารถช่วยคุณได้

การตรวจสอบ / ตรวจสอบในไฟล์และโฟลเดอร์

คุณพลาดที่จะเขียนสิ่งที่คุณใช้ GUI ทั้งTortoiseGitและgit-guiสามารถทำได้อย่างแน่นอน

การแก้ไขข้อขัดแย้ง

สำหรับสิ่งที่ฉันกำลังใช้ git-guiหรือแก้ไขข้อความที่ชื่นชอบ

ฉันคาดหวังว่า GUI จะมี Connect To ... หรืออะไรทำนองนั้น

เชื่อมต่อกับอะไรเมื่ออาจมีการรีโมต 0 ถึง N Git ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลมันสร้างการเชื่อมต่อเพียงชั่วคราวและเฉพาะสำหรับคำสั่งบางอย่างที่ทำงานกับที่เก็บระยะไกล งานส่วนใหญ่ทำได้ในพื้นที่

ฉันคาดว่าจะแสดงรายการของโครงการ

ฉันสมมติว่าโดยที่คุณหมายถึงprojectsrepositories

ฉันเกรงว่าจะไม่มีสิ่งนั้น Git บนเซิร์ฟเวอร์ระยะไกลทำงานอย่างเคร่งครัดกับที่เก็บหนึ่งเท่านั้น .gitรายการที่เก็บทั้งหมดจะเทียบเท่ากับรายชื่อไดเรกทอรีทั้งหมดที่มีไดเรกทอรีย่อย GitHubฉันแน่ใจว่ามีบางสิ่งบางอย่างเช่นนี้ใน

ฉันเลือกหนึ่งฉันคาดว่าจะเห็นรายการไฟล์และโฟลเดอร์ของโครงการนั้นเช่นเดียวกับการสำรวจ

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

จากนั้นฉันต้องการคลิกขวาที่ไฟล์และเลือกการเช็คอิน ... หรือเช็คเอาต์และสิ่งที่ต้องการ

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

ก่อนที่คุณจะเริ่มงานของคุณgit fetchหรือgit pullการเปลี่ยนแปลงจากระยะไกลในกรณีที่คนอื่นอาจทำงานด้วย

ฉันคาดหวังมากไหม

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


5

ฉันทำให้ journy จากแหล่งภาพปลอดภัยถึง tfs ถึง svn ถึง git

การเปลี่ยนจาก vss เป็น tfs เป็นประสบการณ์ที่น่าพึงพอใจ การเปลี่ยนจาก tfs เป็น svn เป็นประสบการณ์ที่น่าพึงพอใจ การไปจาก svn ไป git นั้นเป็นการต่อสู้ภายใน

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

ช่วงเวลาที่ยูเรก้าสำหรับฉันมาเมื่อฉันเลิกค้นหาเหรียญเงิน gui และเริ่มลอง git bash ลอง (ฉันยังเรียนรู้อยู่)

ฉันติดตั้ง guis แล้วและพวกเขาก็คอมไพล์คอมไพล์จากบรรทัดคำสั่ง ส่วนขยาย Git ผู้ให้บริการควบคุมแหล่ง Git สำหรับ visual studio และ git เต่า แต่ฉันบอกว่าคุ้นเคยกับทุบตีคอมไพล์ คำสั่งอาจเป็นความลับเล็กน้อย แต่เมื่อคุณเรียนรู้พวกเขาพวกเขาจะเร็วกว่า gui

การแตกแขนงด้วย git นั้นยอดเยี่ยมมากเมื่อเทียบกับคนอื่น ๆ สร้างสาขาและสลับระหว่างสาขามันเกือบจะทันที คุณสามารถทำสิ่งที่คุณจะไม่รำคาญกับ svn เพราะ svn โดยทั่วไปจะคัดลอกสำเนาการทำงานของคุณ (อย่างน้อยวิธีที่ฉันทำมัน)

ฉันพบว่า Git มีช่วงการเรียนรู้ที่ชันกว่า svn แต่เมื่อคุณ "ได้รับ" ด้วย git คุณไม่ต้องการกลับไป

คอมไพล์ตลอดทาง


5

คุณเคยมีเซิร์ฟเวอร์ที่เก็บไฟล์ของคุณและเป็นเจ้าของมีอำนาจทุกอย่างของพวกเขา ในการแก้ไขไฟล์คุณต้องขออนุญาตจากเซิร์ฟเวอร์

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

ขั้นตอนการทำงาน:

  1. Clone (ดาวน์โหลด) / สร้างที่เก็บ
  2. ทำการเปลี่ยนแปลงบางอย่าง ดำเนินการพัฒนาต่อไปโดยไม่ใส่ใจผู้อื่น
  3. พุชไปยังที่เก็บอื่น (อาจเป็นเซิร์ฟเวอร์เช่น GitHub)
  4. เมื่อคุณพุชไปยังที่เก็บเจ้าของของที่เก็บอื่นจะได้รับแจ้งถึงการพุชที่ค้างอยู่และต้องตัดสินใจว่าจะยอมรับการคอมมิทเหล่านั้นปฏิเสธพวกมันหรือรับเซตย่อยของพวกมัน
  5. วัฏจักรต่อเนื่อง

นั้นคือทั้งหมด.


1

คุณหมายถึงอะไร "the" git gui? มีล้านล้านของพวกเขารวมถึงปลั๊กอินสำหรับการรวมสตูดิโอภาพถ้าฉันจำได้อย่างถูกต้อง หาก GUI ตัวใดตัวหนึ่งไม่เหมาะกับคุณให้ลองเพิ่มอีกจนกว่าจะเจออันที่ใช้ได้ ฉันเองใช้ GUI ที่แตกต่างกันสำหรับงานที่แตกต่างกัน (และ CLI สำหรับผู้อื่น)

อย่างไรก็ตาม git เป็นกรอบการควบคุมเวอร์ชันมากกว่าระบบคงที่ คุณยังจะต้องเรียนรู้พื้นฐานบางอย่างเพื่อรับประโยชน์สูงสุดจากมัน


-2

ฉันคาดหวังมากไหม

ใช่

ฉันควรทำอย่างไรเพื่อใช้ Git ง่าย ๆ เช่นเดียวกับ TFS

ไม่มีอะไร Git นั้นเป็นศูนย์กลาง CLI และไม่มีส่วนหน้าที่ดี (ฉันรู้เกี่ยวกับ TortoiseGit ซึ่งไม่ได้คำตอบเมื่อเทียบกับ Tortoise * อื่น ๆ ) คุณสามารถลองใช้ SmartGit (ระวัง Java)


1
-1: การตรวจสอบไฟล์เข้า / ออกและการแก้ไขข้อขัดแย้งไม่ได้เป็นการคาดหวังมากจากการควบคุมแหล่งที่มา
Steven Evers

2
+1 การตรวจสอบโดยตรงจากเซิร์ฟเวอร์ระยะไกลไม่สมเหตุสมผล เป็นเพียงการช้าแม้ผ่าน LAN การทำสิ่งต่าง ๆ นี้เป็นสิ่งที่ FTP ใช้ไม่ใช่ VCS
maaartinus

1
ไฟล์ "Checking in / out" ไม่ใช่การดำเนินการพื้นฐานสำหรับ VCS มันเป็นคุณสมบัติการใช้งานร่วมกันกับ VCS ส่วนใหญ่และเป็นหนึ่งที่มีผลข้างเคียงที่บอบบาง แต่โชคร้าย
kylben

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

1
โดย 'การเช็คอิน / เช็คเอาต์' ฉันกำลังพูดถึงวิธีที่ VCS ใช้ล็อกสิ่งต่าง ๆ ไม่ใช่วิธีที่คุณสามารถดาวน์โหลดไฟล์ต้นฉบับเพื่อแก้ไข (ซึ่งจริงๆแล้วเป็นสิ่งที่ VCS ทุกคนต้องสามารถทำได้) ความจริงที่ว่า VCS หลายแห่งอ้างถึงขั้นตอนการดาวน์โหลดไฟล์ว่า 'เช็คเอาต์' เป็นบิตของการเรียกชื่อผิดพลาด IMO - ไม่มีการตรวจสอบใด ๆ และที่เก็บไม่จำผู้ที่มีไฟล์
tdammers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.