แทนที่จะเป็นการแนะนำตัว
สวัสดีอนาคตวิศวกรซอฟต์แวร์อาวุโสข้อมูลพื้นฐานเกี่ยวกับ Git
Git คือระบบควบคุมเวอร์ชันแบบกระจายสำหรับโค้ดของเรา ทำไมเราถึงต้องการมัน? ทีมแบบกระจายต้องการระบบการจัดการงานบางประเภท จำเป็นต้องติดตามการเปลี่ยนแปลงที่เกิดขึ้นเมื่อเวลาผ่านไป นั่นคือทีละขั้นตอนเราจะดูว่าไฟล์ใดมีการเปลี่ยนแปลงและอย่างไร สิ่งนี้สำคัญอย่างยิ่งเมื่อคุณวิเคราะห์สิ่งที่ทำไปแล้วภายในงานเดียว: ทำให้สามารถย้อนกลับได้ ลองจินตนาการถึงสถานการณ์: มีโค้ดที่ใช้งานได้ ทุกอย่างอยู่ในนั้นดี แต่เราตัดสินใจที่จะปรับปรุงบางอย่าง ปรับแต่งที่นี่ ปรับแต่งที่นั่น ทุกอย่างเรียบร้อยดี แต่การปรับปรุงนี้ทำให้ฟังก์ชันการทำงานลดลงครึ่งหนึ่งและทำให้ไม่สามารถทำงานได้ แล้วจะเป็นอย่างไรต่อไป? หากไม่มี Gita เราจะต้องนั่งเป็นเวลาหลายชั่วโมงและจำได้ว่าทุกอย่างเป็นอย่างไร ดังนั้นเราจึงย้อนกลับไปที่การคอมมิตก็แค่นั้นแหละ หรือจะเกิดอะไรขึ้นถ้ามีนักพัฒนาสองคนทำการเปลี่ยนแปลงโค้ดพร้อมกัน? หากไม่มี Git ก็จะเป็นแบบนี้: พวกเขาคัดลอกโค้ดจากต้นฉบับและทำในสิ่งที่พวกเขาต้องทำ ถึงเวลานั้นแล้วและทั้งคู่ต้องการเพิ่มการเปลี่ยนแปลงลงในโฟลเดอร์หลัก แล้วสถานการณ์แบบนี้จะทำยังไงล่ะ.. ไม่กล้าแม้แต่จะกะเวลามาทำงานนี้ด้วยซ้ำ จะไม่มีปัญหาดังกล่าวเลยหากคุณใช้ Gitการติดตั้ง Git
มาติดตั้ง Git บนคอมพิวเตอร์ของคุณกันดีกว่า ฉันเข้าใจว่าทุกคนมี OS ที่แตกต่างกัน ดังนั้นฉันจะพยายามอธิบายหลายกรณีการติดตั้งสำหรับ Windows
ตามปกติคุณจะต้องดาวน์โหลดไฟล์ exe และเปิดใช้งาน ทุกอย่างง่ายดายที่นี่: คลิกที่ลิงก์ Google แรกติดตั้ง เท่านี้ก็เรียบร้อย สำหรับงานเราจะใช้ bash console ที่พวกเขาเตรียมไว้ให้ หากต้องการทำงานบน Windows คุณต้องเรียกใช้ Git Bash นี่คือลักษณะที่ปรากฏในเมนูเริ่ม:

การติดตั้งสำหรับ Linux
โดยปกติแล้ว คอมไพล์จะถูกติดตั้งไว้แล้วและรวมอยู่ในลีนุกซ์รุ่นต่างๆ เนื่องจากเป็นเครื่องมือที่เดิมเขียนขึ้นเพื่อพัฒนาเคอร์เนลลินุกซ์ แต่มีบางสถานการณ์เมื่อไม่อยู่ที่นั่น หากต้องการตรวจสอบสิ่งนี้ คุณจะต้องเปิดเทอร์มินัลแล้วพิมพ์: git --version หากมีคำตอบที่ชัดเจนก็ไม่ต้องติดตั้งอะไรเลย เปิดเทอร์มินัลแล้วติดตั้ง ฉันทำงานบน Ubuntu ดังนั้นฉันจึงสามารถบอกคุณได้ว่าจะเขียนอะไร: sudo apt-get install git เพียงเท่านี้ ตอนนี้คุณสามารถใช้ Git ในเทอร์มินัลใดก็ได้การติดตั้งบน macOS
ที่นี่เช่นกัน ก่อนอื่นคุณต้องตรวจสอบว่ามี Git อยู่แล้วหรือไม่ (ดูด้านบน เช่นเดียวกับบน Linux) ถ้าไม่เช่นนั้น วิธีที่ง่ายที่สุดคือดาวน์โหลดเวอร์ชันล่าสุด หากติดตั้ง XCode แล้ว Git จะถูกติดตั้งโดยอัตโนมัติอย่างแน่นอนการตั้งค่าคอมไพล์
คอมไพล์มีการตั้งค่าผู้ใช้ที่จะดำเนินการงาน นี่เป็นสิ่งที่สมเหตุสมผลและจำเป็น เพราะเมื่อมีการสร้างการคอมมิต Git จะนำข้อมูลนี้ไปใช้กับฟิลด์ Author อย่างแน่นอน หากต้องการตั้งชื่อผู้ใช้และรหัสผ่านสำหรับทุกโครงการ คุณต้องป้อนคำสั่งต่อไปนี้:
git config --global user.name ”Ivan Ivanov”
git config --global user.email ivan.ivanov@gmail.com
หากจำเป็นต้องเปลี่ยนผู้เขียนสำหรับโปรเจ็กต์เฉพาะ (เช่น สำหรับโปรเจ็กต์ส่วนตัว) คุณสามารถลบ --global ได้ และสิ่งนี้จะได้ผล:
git config user.name ”Ivan Ivanov”
git config user.email ivan.ivanov@gmail.com
ทฤษฎีเล็กๆ น้อยๆ...
เพื่อให้อยู่ในหัวข้อ ขอแนะนำให้เพิ่มคำและการกระทำใหม่ ๆ ลงในข้อความของคุณ... ไม่เช่นนั้นจะไม่มีอะไรจะพูดถึง แน่นอนว่านี่เป็นศัพท์เฉพาะและสำเนาของภาษาอังกฤษ ดังนั้นฉันจะเพิ่มความหมายเป็นภาษาอังกฤษ คำพูดและการกระทำอะไร?- พื้นที่เก็บข้อมูลคอมไพล์;
- กระทำ (กระทำ);
- สาขา;
- ผสาน;
- ความขัดแย้ง;
- ดึง;
- ดัน;
- วิธีละเว้นไฟล์บางไฟล์ (.gitignore)
รัฐใน Git
Gita มีหลายรัฐที่ต้องเข้าใจและจดจำ:- ไม่ได้ติดตาม;
- แก้ไข;
- เตรียมพร้อม (จัดฉาก);
- มุ่งมั่น.
มันหมายความว่าอะไร?
นี่คือสถานะที่มีไฟล์จากโค้ดของเราอยู่ นั่นคือเส้นทางชีวิตของพวกเขามักจะมีลักษณะดังนี้:- ไฟล์ที่สร้างขึ้นและไม่ได้เพิ่มไปยังที่เก็บจะอยู่ในสถานะไม่ถูกติดตาม
- เราทำการเปลี่ยนแปลงกับไฟล์ที่ถูกเพิ่มไปยังที่เก็บ Git แล้ว - ไฟล์เหล่านั้นอยู่ในสถานะแก้ไข
- จากไฟล์ที่เราเปลี่ยนแปลง เราเลือกเฉพาะไฟล์ (หรือทั้งหมด) ที่เราต้องการ (เช่น เราไม่ต้องการคลาสที่คอมไพล์แล้ว) และคลาสที่มีการเปลี่ยนแปลงเหล่านี้จะอยู่ในสถานะเป็นฉาก
- คอมมิตถูกสร้างขึ้นจากไฟล์ที่เตรียมไว้จากสถานะที่เป็นฉากและเข้าไปในที่เก็บ Git หลังจากนี้ สถานะเป็นฉากจะว่างเปล่า แต่การแก้ไขอาจจะยังมีอะไรบางอย่างอยู่

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

สาขาอะไร

เริ่มต้นใช้งาน Git
คุณสามารถทำงานกับพื้นที่เก็บข้อมูลในเครื่องหรือพื้นที่เก็บข้อมูลระยะไกลเท่านั้น ในการทำงานกับคำสั่งที่จำเป็น คุณสามารถใช้ได้เฉพาะพื้นที่เก็บข้อมูลในเครื่องเท่านั้น โดยจะเก็บข้อมูลทั้งหมดไว้ภายในโปรเจ็กต์ในโฟลเดอร์ .git เท่านั้น หากเราพูดถึงระยะไกล ข้อมูลทั้งหมดจะถูกเก็บไว้ที่ใดที่หนึ่งบนเซิร์ฟเวอร์ระยะไกล: มีเพียงสำเนาของโครงการเท่านั้นที่จัดเก็บไว้ในเครื่อง การเปลี่ยนแปลงที่สามารถพุช (git push) ไปยังที่เก็บระยะไกลได้ เราจะหารือเกี่ยวกับการทำงานกับคอมไพล์ในคอนโซลที่นี่และต่อไป แน่นอน คุณสามารถใช้โซลูชันกราฟิกบางอย่างได้ (เช่น ใน Intellij IDEA) แต่ก่อนอื่นคุณต้องทราบก่อนว่าคำสั่งใดกำลังเกิดขึ้นและหมายความว่าอย่างไรการทำงานกับ Git ในพื้นที่เก็บข้อมูลในเครื่อง
ต่อไป ฉันขอแนะนำให้คุณทำตามขั้นตอนทั้งหมดที่ฉันทำในขณะที่คุณอ่านบทความ สิ่งนี้จะช่วยเพิ่มความเข้าใจและการเก็บรักษาเนื้อหาของคุณ ขอให้อร่อยนะ :) หากต้องการสร้างพื้นที่เก็บข้อมูลในเครื่อง คุณต้องเขียน:
git init

git status

- git add -A - เพิ่มไฟล์ทั้งหมดจากสถานะเป็นฉาก
- คอมไพล์เพิ่ม — เพิ่มไฟล์ทั้งหมดจากโฟลเดอร์นี้และไฟล์ภายในทั้งหมด โดยพื้นฐานแล้วเหมือนกับอันก่อนหน้า
- git add <filename> - เพิ่มเฉพาะไฟล์ที่ระบุ ที่นี่คุณสามารถใช้นิพจน์ทั่วไปเพื่อเพิ่มตามรูปแบบบางอย่างได้ ตัวอย่างเช่น git add *.java: หมายความว่าคุณจะต้องเพิ่มไฟล์ที่มีนามสกุล java เท่านั้น
git add *.txt
ในการตรวจสอบสถานะเราใช้คำสั่งที่เรารู้อยู่แล้ว:
git status

git commit -m “all txt files were added to the project”

git log

git status

git status

git diff

git add test_resource.txt
git commit -m “added hello word! to test_resource.txt”
หากต้องการดูการคอมมิตทั้งหมด ให้เขียน:
git log

git add GitTest.java
git commit -m “added GitTest.java”
git status

การทำงานกับ .gitignore
เห็นได้ชัดว่าเราต้องการเก็บซอร์สโค้ดเท่านั้นและไม่มีอะไรอื่นในที่เก็บ มันจะเป็นอะไรอีกล่ะ? อย่างน้อยที่สุด คลาสที่คอมไพล์และ/หรือไฟล์ที่สร้างสภาพแวดล้อมการพัฒนา เพื่อให้ Git เพิกเฉยต่อไฟล์เหล่านี้ จะต้องสร้างไฟล์พิเศษขึ้นมา เราทำสิ่งนี้: เราสร้างไฟล์ในรูทของโปรเจ็กต์ชื่อ .gitignore และในไฟล์นี้ แต่ละบรรทัดจะเป็นรูปแบบที่จะละเว้น ในตัวอย่างนี้ git ละเว้นจะมีลักษณะดังนี้:
```
*.class
target/
*.iml
.idea/
```
ลองดูตอนนี้:
- บรรทัดแรกคือการละเว้นไฟล์ทั้งหมดที่มีนามสกุล .class
- บรรทัดที่สองคือการละเว้นโฟลเดอร์เป้าหมายและทุกอย่างที่มีอยู่
- บรรทัดที่สามคือการละเว้นไฟล์ทั้งหมดที่มีนามสกุล .iml
- บรรทัดที่สี่คือการละเว้นโฟลเดอร์ .idea
git status


git add .gitignore
git commit -m “added .gitignore file”
และตอนนี้ช่วงเวลาแห่งความจริง: เรามีคลาส GitTest.class ที่คอมไพล์แล้วในสถานะที่ไม่ถูกติดตาม ซึ่งเราไม่ต้องการเพิ่มลงในที่เก็บ Git นี่คือจุดที่ git ละเว้นควรทำงาน:
git status

ทำงานกับสาขาและอื่น ๆ
แน่นอนว่าการทำงานในสาขาเดียวนั้นไม่สะดวกสำหรับคนเดียวและเป็นไปไม่ได้เมื่อมีคนในทีมมากกว่าหนึ่งคน มีสาขาสำหรับสิ่งนี้ ดังที่ผมได้กล่าวไปแล้วว่า Branch เป็นเพียงตัวชี้เคลื่อนที่ในการดำเนินการ ในส่วนนี้ เราจะมาดูการทำงานในสาขาต่างๆ วิธีผสานการเปลี่ยนแปลงจากสาขาหนึ่งไปยังอีกสาขาหนึ่ง ข้อขัดแย้งที่อาจเกิดขึ้น และอื่นๆ อีกมากมาย หากต้องการดูรายการสาขาทั้งหมดใน Repository และทำความเข้าใจว่าคุณอยู่ในสาขาใด คุณต้องเขียน:
git branch -a

- สร้างสาขาใหม่ตามสาขาที่เราอยู่ (99% ของกรณี)
- สร้างสาขาตามการคอมมิตเฉพาะ (1%)
สร้างสาขาตามการคอมมิตเฉพาะ
เราจะอาศัยตัวระบุการคอมมิตที่ไม่ซ้ำใคร หากต้องการค้นหาเราเขียนว่า:
git log

git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
สาขาถูกสร้างขึ้นโดยมีเพียงสองคอมมิตแรกจากสาขาหลัก เพื่อทดสอบสิ่งนี้ ก่อนอื่นเราต้องแน่ใจว่าเราได้ย้ายไปยังสาขาอื่นแล้วดูจำนวนการคอมมิตในสาขานั้น:
git status
git log

git branch -a

สร้างสาขาตามสาขาปัจจุบัน
วิธีที่สองในการสร้างสาขาคือการสร้างสาขาอื่น ฉันต้องการสร้างสาขาตามสาขาหลัก ดังนั้นฉันต้องเปลี่ยนไปใช้สาขานั้นก่อน และขั้นตอนต่อไปคือการสร้างสาขาใหม่ มาดูกัน:- git checkout master - ย้ายไปที่สาขาหลัก
- สถานะ git - ตรวจสอบว่าอยู่บนต้นแบบหรือไม่

git checkout -b feature/update-txt-files

แก้ไขข้อขัดแย้ง
ก่อนที่เราจะเข้าใจว่าความขัดแย้งคืออะไร เราต้องพูดถึงการรวม (รวม) สาขาหนึ่งเข้ากับอีกสาขาหนึ่งก่อน รูปภาพนี้สามารถแสดงกระบวนการเมื่อสาขาหนึ่งถูกรวมเข้าเป็นอีกสาขาหนึ่ง

git add *.txt
git commit -m “updated txt files”
git log

git checkout master
git merge feature/update-txt-files
git log

git branch -D feature/update-txt-files
จนถึงตอนนี้ก็ชัดเจนแล้วใช่ไหม? มาทำให้สถานการณ์ซับซ้อนขึ้น: ตอนนี้สมมติว่าเราต้องเปลี่ยนไฟล์ txt อีกครั้ง แต่ตอนนี้ไฟล์นี้จะถูกเปลี่ยนในตัวช่วยสร้างด้วย นั่นคือมันจะเปลี่ยนแปลงไปพร้อมๆ กัน และ Git จะไม่สามารถเข้าใจได้ว่าต้องทำอะไรในสถานการณ์เมื่อเราต้องการรวมโค้ดใหม่เข้ากับสาขาหลัก ไป! เราสร้างสาขาใหม่ตามต้นแบบ ทำการเปลี่ยนแปลง text_resource.txt และสร้างการคอมมิตสำหรับเรื่องนี้:
git checkout -b feature/add-header
... делаем изменения в файле

git add *.txt
git commit -m “added header to txt”

git checkout master
… обновor test_resource.txt

git add test_resource.txt
git commit -m “added master header to txt”
และตอนนี้เป็นช่วงเวลาที่น่าสนใจที่สุด: คุณต้องผสานการเปลี่ยนแปลงจากสาขาคุณลักษณะ/ส่วนเสริมไปยังต้นแบบ เราอยู่ในสาขาหลัก ดังนั้นสิ่งที่เราต้องทำคือเขียนว่า:
git merge feature/add-header
แต่เราจะได้ผลลัพธ์ที่มีข้อขัดแย้งในไฟล์ test_resource.txt: 

- ระหว่าง “<<<<<<< HEAD” และ “=======” เป็นการเปลี่ยนแปลงหลักที่อยู่ในบรรทัดนี้ในสาขาหลัก
- ระหว่าง “=======” และ “>>>>>>> คุณลักษณะ/เพิ่มส่วนหัว” มีการเปลี่ยนแปลงที่อยู่ในสาขาคุณลักษณะ/เพิ่มส่วนหัว

git status

git add *.txt

git commit

การทำงานกับที่เก็บข้อมูลระยะไกล
ขั้นตอนสุดท้ายคือการทำความเข้าใจคำสั่งเพิ่มเติมสองสามคำสั่งที่จำเป็นในการทำงานกับพื้นที่เก็บข้อมูลระยะไกล ดังที่ฉันได้กล่าวไปแล้ว พื้นที่เก็บข้อมูลระยะไกลเป็นสถานที่จัดเก็บพื้นที่เก็บข้อมูลและจากที่ที่คุณสามารถโคลนได้ ที่เก็บข้อมูลระยะไกลประเภทใดบ้าง? มีตัวอย่างมากมาย:-
GitHubเป็นพื้นที่เก็บข้อมูลที่ใหญ่ที่สุดสำหรับพื้นที่เก็บข้อมูลและการพัฒนาร่วมกัน ฉันได้อธิบายไปแล้วในบทความก่อนหน้านี้
สมัครสมาชิกบัญชี Github ของฉัน ฉันมักจะแสดงผลงานของฉันในพื้นที่ที่ฉันเรียนระหว่างทำงาน -
GitLab เป็น เครื่องมือวงจรชีวิตDevOpsบน เว็บแบบ โอเพ่นซอร์ส ที่ให้ ระบบจัดการที่เก็บ โค้ด สำหรับGitพร้อมด้วยวิกิระบบติดตามปัญหา ไปป์ไลน์ CI/CD และคุณสมบัติอื่นๆ ของ ตัวเอง
หลังจากข่าวที่ Microsoft ซื้อ GitHub นักพัฒนาบางคนก็ทำซ้ำงานของพวกเขาใน GitLab -
BitBucket เป็นบริการเว็บสำหรับการโฮสต์โปรเจ็กต์และการพัฒนาร่วมกัน โดยใช้ระบบควบคุมเวอร์ชัน Mercurial และ Git ครั้งหนึ่งมีข้อได้เปรียบเหนือ GitHub มากตรงที่มีพื้นที่เก็บข้อมูลส่วนตัวฟรี เมื่อปีที่แล้ว GitHub ยังเปิดให้ทุกคนใช้ฟีเจอร์นี้ได้ฟรี
-
และอื่นๆ...
git clone https://github.com/romankh3/git-demo
ขณะนี้มีสำเนาโครงการฉบับสมบูรณ์ในเครื่องแล้ว เพื่อให้แน่ใจว่าสำเนาล่าสุดของโครงการอยู่ในเครื่อง คุณจะต้องทิ้งข้อมูลตามที่พวกเขาพูดโดยเขียน:
git pull


git add test_resource.txt
git commit -m “prepated txt for pushing”
และตอนนี้คำสั่งให้พุชสิ่งนี้ไปยังที่เก็บระยะไกล:
git push

ลิงค์ที่เป็นประโยชน์
- เอกสาร อย่างเป็นทางการ เกี่ยวกับ Git เป็นภาษารัสเซีย ผมขอแนะนำเป็นแนวทางครับ
- คอมไพล์
GO TO FULL VERSION