而不是介紹
你好,未來的高級軟體工程師。Git 基礎知識
Git 是我們程式碼的分散式版本控制系統。為什麼我們需要它?分散式團隊需要某種工作管理系統。需要追蹤隨著時間的推移而發生的變化。也就是說,我們一步步查看哪些文件已更改以及如何更改。當您分析一項任務中所做的事情時,這一點尤其重要:這使得可以返回。讓我們想像一種情況:有一個工作代碼,裡面的一切都很好,但我們決定改進一些東西,在這裡調整它,在那裡調整它。一切都很好,但這項改進破壞了一半的功能,使其無法運作。那麼,下一步是什麼?如果沒有梵歌,人們將不得不坐上幾個小時並記住一切最初的樣子。所以我們只需回滾到提交即可。或者如果有兩個開發人員同時更改程式碼怎麼辦?如果沒有 Git,它看起來像這樣:他們從原始程式碼複製程式碼並執行他們需要執行的操作。這一刻到來了,兩人都想將他們的更改添加到主資料夾中。在這種情況下該怎麼辦?...我甚至不敢估計做這項工作的時間。如果使用Git就完全不會出現這樣的問題。安裝Git
讓我們在您的電腦上安裝 Git。我知道每個人都有不同的作業系統,所以我將嘗試描述幾種情況。Windows 安裝
像往常一樣,您需要下載 exe 檔案並運行它。這裡一切都很簡單:點擊第一個 Google 鏈接,安裝即可。對於工作,我們將使用他們提供的 bash 控制台。要在 Windows 上工作,您需要執行 Git Bash。這就是開始功能表中的樣子:

Linux 安裝
通常 git 已經安裝並包含在 Linux 發行版中,因為它是最初為開發 Linux 核心而編寫的工具。但有些情況下它並不存在。要檢查這一點,您需要打開終端機並輸入:git --version。如果有明確的答案,則無需安裝任何東西。打開終端並安裝。我在 Ubuntu 上工作,所以我可以告訴你要為其寫什麼:sudo apt-get install git。就是這樣:現在您可以在任何終端中使用 Git。在 macOS 上安裝
在這裡,首先您也需要檢查 Git 是否已經存在(請參閱上文,如在 Linux 上)。如果沒有,最簡單的方法是下載最新版本。如果安裝了XCode,那麼Git肯定會自動安裝。Git 設定
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
一點理論...
為了緊扣主題,建議在您的訊息中添加一些新的單字和動作……否則就沒什麼可談的了。當然,這是一些行話和英文的副本,所以我會用英文添加含義。有哪些言語和動作?- git 儲存庫;
- 提交(提交);
- 分支;
- 合併;
- 衝突;
- 拉;
- 推;
- 如何忽略某些文件(.gitignore)。
Git 中的狀態
《梵歌》有幾個需要理解和記住的狀態:- 未追蹤;
- 修改的;
- 準備好的(上演的);
- 堅定的。
這是什麼意思?
這些是我們程式碼中的檔案所在的狀態。也就是說,他們的人生軌跡通常是這樣的:- 建立但未新增至儲存庫的檔案將處於未追蹤狀態。
- 我們對已新增至 Git 儲存庫的檔案進行變更 - 它們處於已修改狀態。
- 從我們已更改的文件中,我們僅選擇那些(或全部)我們需要的(例如,我們不需要編譯的類別),並且這些發生更改的類別落入暫存狀態。
- 提交是根據暫存狀態中準備好的文件創建的,並進入 Git 存儲庫。此後,暫存狀態為空。但修改後可能仍然包含一些東西。

什麼是提交
提交是版本控制中的主要物件。它包含自該提交以來的所有更改。提交像單鍊錶一樣相互連結。即:有第一次提交。當創建第二個提交時,它(第二個)知道它是在第一個提交之後發生的。這樣您就可以追蹤資訊。提交也有自己的訊息,即所謂的元資料:- 您可以透過它找到它的唯一提交標識符;
- 創建它的提交作者的姓名;
- 提交創建日期;
- 描述此提交期間所做操作的評論。

什麼是分支機構

Git 入門
您只能使用本機儲存庫,也可以使用遠端儲存庫。要計算出必要的命令,您只能使用本機儲存庫。它將所有資訊僅儲存在專案本地的 .git 資料夾中。如果我們談論遠端,那麼所有資訊都儲存在遠端伺服器上的某個位置:只有項目的副本儲存在本地,對其進行的更改可以推送(git推送)到遠端儲存庫。在這裡以及進一步我們將討論在控制台中使用 git。當然,您可以使用一些圖形解決方案(例如,在 Intellij IDEA 中),但首先您需要弄清楚正在發生什麼命令以及它們的含義。在本機儲存庫中使用 Git
接下來,我建議您按照我在閱讀本文時執行的所有步驟進行操作。這將提高您對材料的理解和記憶。所以祝你胃口好:) 要創建本地存儲庫,您需要編寫:
git init

git status

- git add -A - 新增所有暫存狀態的檔案;
- git 新增 . — 新增此資料夾中的所有檔案以及所有內部檔案。與上一篇基本相同;
- 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 的文件,在這個文件中,每一行都是一個要忽略的模式。在此範例中,gitignore 將如下所示:
```
*.class
target/
*.iml
.idea/
```
現在讓我們來看看:
- 第一行是忽略所有帶有 .class 副檔名的檔案;
- 第二行是忽略目標資料夾及其包含的所有內容;
- 第三行是忽略所有副檔名為.iml的檔案;
- 第四行是忽略.idea資料夾。
git status


git add .gitignore
git commit -m “added .gitignore file”
現在是關鍵時刻:我們有一個已編譯的 GitTest.class 類,處於未追蹤狀態,我們不想將其新增到 Git 儲存庫中。這是 gitignore 應該工作的地方:
git status

與分公司等合作
當然,一個人在分支機構工作很不方便,而且當團隊中有多個人時也是不可能的。為此有一個分支。正如我之前所說,分支只是一個指向提交的移動指標。在這一部分中,我們將研究不同分支中的工作:如何將變更從一個分支合併到另一個分支、可能會出現哪些衝突等等。要查看儲存庫中所有分支的清單並了解您所在的分支,您需要編寫:
git branch -a

- 根據我們現有的分支建立一個新分支(99% 的情況);
- 根據特定提交 (1%) 建立分支。
根據特定提交建立分支
我們將依賴唯一的提交識別碼。為了找到它,我們寫下來:
git log

git checkout -b development 6c44e53d06228f888f2f454d3cb8c1c976dd73f8
建立的分支僅包含主分支的前兩次提交。為了測試這一點,我們首先確保我們已移動到另一個分支並查看其提交數量:
git status
git log

git branch -a

在目前分支的基礎上建立一個分支
創建分支的第二種方法是在另一個分支上建構。我想在master分支的基礎上建立一個分支,所以需要先切換到master分支,下一步就是建立一個新的分支。我們看看吧:- git checkout master - 移動到 master 分支;
- git status - 檢查它是否在主伺服器上。

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 檔案。但現在這個文件也會在嚮導中被更改。也就是說,它會並行改變,當我們想要將新程式碼合併到 master 分支時,Git 將無法理解需要做什麼。去!我們基於 master 建立一個新分支,對 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”
現在最有趣的時刻是:您需要將功能/新增標題分支的變更合併到主分支。我們在 master 分支上,所以我們需要做的就是寫:
git merge feature/add-header
但我們會得到 test_resource.txt 檔案中存在衝突的結果: 

- “<<<<<<< HEAD” 和 “=======” 之間是 master 分支中這一行的主要變更。
- 在「=======」和「>>>>>>>> feature/add-header」之間,feature/add-header 分支中存在一些變更。

git status

git add *.txt

git commit

使用遠端儲存庫
最後一步是了解使用遠端儲存庫所需的更多命令。正如我已經說過的,遠端儲存庫是儲存儲存庫並且可以從其中克隆它的地方。有哪些類型的遠端儲存庫?有很多例子:-
GitHub是最大的儲存庫和協作開發儲存庫。我在之前的文章中已經描述過。
訂閱我的 Github 帳號。我經常在那裡展示我在工作期間研究的領域的作品。 -
GitLab是一個基於Web 的開源DevOps生命週期工具,它為Git提供程式碼儲存庫管理系統,具有自己的 wiki、問題追蹤系統、CI/CD 管道和其他功能。 微軟收購 GitHub 的消息傳出後,一些開發者在 GitLab 重複了他們的工作。
-
BitBucket 是一個基於 Mercurial 和 Git 版本控制系統的用於託管專案及其共同開發的 Web 服務。曾經它比 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

GO TO FULL VERSION