天天看點

GIT版本控制(基礎知識)git版本控制

git版本控制

引題:随着項目越來越大,出現以下問題:

1.項目本來正确,加了些新功能或改bug,結果不知不覺影響到其他功能導緻項目無法運作,再往回改又越來越多的問題.

2.無法檢視較早曆史版本.

3.多人協作,每個人的代碼不完全一緻,項目經理合并代碼時容易出現問題.

主流工具

SVN: (有點像自動同步功能的網盤),特點伺服器上維護共享檔案,用戶端下載下傳(checkout檢出); 用戶端可以修改代碼後在commit送出,也可以從伺服器上update更新最新代碼. SVN前些年,java項目,早期公司必用,但被GIT漸漸取代.

svn缺點:

1>有代碼版本控制功能但因為沒人使用,大家把它當做網盤使用.例如伺服器最開始共享一個代碼v1版本,分發給幾個程式員,然後程式員A開發了一個功能,并送出v2.後面送出功能的人由于代碼環境已變,自己開發的功能還需要費時調整.

2>伺服器一旦崩潰,依賴伺服器的用戶端如果沒有備份資料就丢失了.

(了解)git曆史

GIT:避免了以上缺點,現在公司的主流.相關的生态github也非常流行.每一個代碼送出的時間點都會打一個标簽,每一個程式員開發後送出時都會檢查與上一個最新版本的異同.每一個版本變更資訊都會下載下傳到每一個用戶端.點對點網狀形式拓撲.其中一個點出問題,可以從其他電腦恢複.

git

安裝

官網下載下傳,安裝.向導涉及的名詞在學習linux後會了解,無關緊要,全部保持預設點"next".

基本概念和指令

1.cd項目根目錄

2.[常用]git init : 初始化git倉庫,生成.git隐藏檔案夾,負責跟蹤項目檔案變更.

3.[常用]git add [檔案名] : 把一個檔案添加到"暫存區",未添加的檔案不會被跟蹤,git相比svn,網盤多的概念就是"暫存區".

不太适合跟蹤的檔案有:測試文法的小腳本;依賴包;資料庫

一個一個檔案add太麻煩,git add . (跟蹤所有檔案)。

排除跟蹤的檔案可以在.gitignore中設定.

4.[常用]git commit -m “送出時描述資訊” , 送出就好像是快照.

靠HEAD指針指向時間來管理不同時候送出的版本.每一次送出編一個唯一hash字元串辨別.送出資訊包含送出人和送出時間.

5.git log 檢視檔案變更狀态和送出曆史.

6.(第一次使用設定)git config --global user.email “你的郵箱”

git config --global user.name “你的名字”

7.git status 檢視是否跟蹤,是否變更.

8.git reset --head[送出id] , 版本回退

9.git diff HEAD --[file name] , 比較不同

分支

分支就好像影視作品裡的平行世界,分支代碼互不影響

作用: 1> 做分類 2> 開發新功能時建立分支dev,開發完成後再往master主分支上合并.

1.git branch [branch name] 建立分支

2.git branch 檢視所有分支,高亮的是目前所在分支

3.git checkout [branch name] 切換到分支

4.在master分支下執行 git merge [dev] 把開發的新功能合并到master分支

5.git branch -b [branch name] 第1,3條指令縮寫創分支并且檢出(百度)

遠端倉庫

之前我們做的都是儲存到本地,不夠安全,希望上傳到網絡,并且網絡可以多人協作和溝通.

知名的平台:

github(衆多的開源軟體) gitlab(體驗好界面好,要求電腦組態,公司局域内可以搭建), 國内gitee碼雲(國内速度快),阿裡code(跟阿裡項目管理工具結合緊密)

以github為示例:

大體功能:git自帶功能.watch項目有新内容時郵件提醒;star收藏;fork 克隆項目并上傳成為自己的項目.

準備工作:

在使用推送,下拉功能時,github平台可能報錯沒有權限.因為沒有配置指紋.htps和ssh,ssh協定更加安全.

ssh:secure Shell 直譯安全殼,連接配接遠端伺服器的協定,ssl加密.主要應用遠端登入雲服務.git伺服器.非對稱加密,需要生成秘鑰對,公鑰交給第三方平台.

0.安裝好git, 如果沒有設定git資訊設定一下

git config --global user.email “你的郵箱”

git config --global user.name “你的名字”

1.電腦本地生成秘鑰對.

終端運作 ssh-keygen 指令,ssh key generate

一路回保持預設

c:/user/xxx/.ssh/ id_rsa.pub 公鑰 id_rsa 私鑰

2.把公鑰檔案用文本編輯器打開,把内容複制到github-個人-settings-ssh keys

3.找一個倉庫 git clone [email protected]:canaan-yz/testgit3.git進行測試

1.克隆clone(下載下傳)

git clone [倉庫連結]

倉庫連結https ssh,ssh連結需要在網站添加指紋

2.下拉(更新)(已下載下傳前提下更新新内容)

git pull

3.參與到開源項目當中

自己開發,本地送出,平台上把自己送出作為pull requests(簡稱pr),項目管理者就會看到你的申請,覺得你代碼沒問題就會合并到主分支.

4.本地項目(上傳)推送到github

(第一次上傳)git push -u origin master

origin 約定俗稱代表遠端伺服器github.com

(僞代碼 git push -u local master origin master)

master遠端分支

-u 把本地目前分支關聯到遠端master分支.注意本地分支名一般與遠端分支名一緻.

(以後上傳)git push, 上傳已經commit過的代碼,沒有commit過的仍然在電腦本地 . 第一次使用此指令報分支未跟蹤錯誤.

情況一:github先建立空倉庫,然後clone到本地,之後commit ,(因為是clone是以分支已經對應好了)git push

情況二(大多數):本地開發好了想上傳,然後github建立空倉庫,需要把本地和遠端倉庫對應一下,設定origin遠端倉庫位址,git push -u.

建立空倉庫:起項目名一般與本地項目名一緻.readme.md .gitignore 如果本地已有的話不要遠端倉庫不要建立,否則送出時沖突.license隻是産權協定,不是特别正式的項目不需要.

5.解決沖突

兩個程式員clone了一份程式,程式員A添加了功能并送出,程式員B修改跟A同樣的一個檔案并送出,這時發生代碼沖突.B解決方案:放棄自己的修改,更新A的修改,在A的代碼基礎上在繼續自己的開發.或是強行送出,覆寫A的代碼.是以平時開發項目,最好先git pull 讓本地代碼最新,這樣沖突機率最小,在開發新功能,平時注意跟同僚事先溝通,開發完之後及時送出.

ide中以pycharm為例子中使用GUI

項目git init之後出現相關工具

紅色檔案表示未追蹤

add後變為藍色

commit後變為正常色

右上角

對号commit

向下箭頭pull 時鐘圖示可以看檔案曆史git log

回轉箭頭 傳回到最近一次送出

編輯區 右鍵 git-gitcompare可以檢視目前檔案跟某一版本的異同

git