簡單的來說,就是為了託管龐大的linux原始碼,開始選擇了商用的版本控制系統bitkeeper,但是因為一系列操作,bitkeeper不讓用了,所以linus花了兩周時間自己用c寫了乙個分布式版本控制系統,這就是git!自己寫了乙個,還用了兩周...
記住分布式的比集中式的流弊就完事了。
linux系統
sudo apt-get install git
選擇乙個合適的地方,建立乙個空目錄
通過git init命令把這個目錄變成git可以管理的倉庫
git init
增加/修改檔案並提交
例如,用vscode增加乙個readme.md檔案,然後
git add readme.md
git commit -m '我建立了readme.md檔案'
第一步是用git add把檔案新增進去,實際上就是把檔案修改新增到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支;
git status,可以讓我們時刻掌握倉庫當前的狀態.
**git diff --file_name **,顧名思義就是檢視difference,顯示的格式正是unix通用的diff格式.
git log,顯示從最近到最遠的提交日誌.
git reflog,檢視命令歷史,以便確定要回到未來的哪個版本.
git reset --hard commit_id,head指向的版本就是當前版本,因此,git允許我們在版本的歷史之間穿梭.
git reset head file_name,可以把暫存區的修改撤銷掉(unstage),重新放回工作區,git reset既可以回退版本,也可以把暫存區的修改回退到工作區.
git checkout -- file_name,命令把file_name檔案在工作區的修改全部撤銷,這裡有兩種情況:
一種是file_name自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是file_name已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。
總之,就是讓這個檔案回到最近一次git commit或git add時的狀態。
拉取指定檔案:
git fetch
git checkout origin/master -- path/folder/filename
撤銷commit:
一般本地更改**後,會進行如下操作:
git add .// 新增所有檔案
git commit -m「本功能完成」
但是,此時先撤回commit如何做呢?
git reset --mixed head^
說明:指不刪除工作空間改動**,撤銷commit,並且撤銷git add . 操作。這個為預設引數,git reset --mixed head^ 和 git reset head^ 效果是一樣的。
git reset --soft head^// head^代表上乙個版本,亦可以寫成head~1,同理撤回兩次commit,可以使用head~2
說明:不刪除工作空間改動**,撤銷commit,不撤銷git add . 操作 。
git reset --hard head^git commit --amend
撤銷修改小結:
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head ,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。
建立ssh key
開啟git bash,輸入ssh-keygen -t rsa -c "[email protected]"
回車執行後,在使用者主目錄裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是ssh key的秘鑰對,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
登入**託管**,在設定裡增加ssh key,填寫id_rsa.pub檔案的內容。
git checkout,命令加上-b引數表示建立並切換,相當於以下兩條命令:
git branch dev
git checkout dev
例如:git checkout -b dev,建立了dev分支,然後切換到dev分支。
git switch,最新版本的git提供了這個新的命令來切換分支
git branch -d dev,刪除了dev分支
git branch,會列出所有分支,當前分支前面會標乙個*號。
git merge,用於合併指定分支到當前分支
例如:當前在master,使用git merge dev,則會把dev的內容合併到master。
git log --graph,可以看到分支合併圖。
git branch -d,如果要丟棄乙個沒有被合併過的分支,可以通過該命令強行刪除。
git rebase,可以把本地未push的分叉提交歷史整理成直線。rebase的目的是使得我們在檢視歷史提交的變化時更容易,因為分叉的提交需要三方對比。
搭建git伺服器需要準備一台執行linux的機器,強烈推薦用ubuntu或debian,這樣,通過幾條簡單的apt命令就可以完成安裝。
假設你已經有sudo許可權的使用者賬號,下面,正式開始安裝。
安裝git:
$ sudo apt-get install git
建立乙個git使用者,用來執行git服務:
$ sudo adduser git
建立證書登入:
收集所有需要登入的使用者的公鑰,就是他們自己的id_rsa.pub檔案,把所有公鑰匯入到/home/git/.ssh/authorized_keys檔案裡,一行乙個。
初始化git倉庫:
先選定乙個目錄作為git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:
$ sudo git init --bare sample.git
git就會建立乙個裸倉庫,裸倉庫沒有工作區,因為伺服器上的git倉庫純粹是為了共享,所以不讓使用者直接登入到伺服器上去改工作區,並且伺服器上的git倉庫通常都以.git結尾。然後,把owner改為git:
$ sudo chown -r git:git sample.git
管理公鑰
如果團隊很小,把每個人的公鑰收集起來放到伺服器的/home/git/.ssh/authorized_keys檔案裡就是可行的。如果團隊有幾百號人,就沒法這麼玩了,這時,可以用gitosis來管理公鑰。
這裡我們不介紹怎麼玩gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的linux管理員問題不大。
管理許可權
有很多不但視源**如生命,而且視員工為竊賊的公司,會在版本控制系統裡設定一套完善的許可權控制,每個人是否有讀寫許可權會精確到每個分支甚至每個目錄下。因為git是為linux源**託管而開發的,所以git也繼承了開源社群的精神,不支援許可權控制。不過,因為git支援鉤子(hook),所以,可以在伺服器端編寫一系列指令碼來控制提交等操作,達到許可權控制的目的。gitolite就是這個工具。
廖雪峰官網-git教程
Git簡易使用教程
1.git 安裝 2.設定git登入資訊 3.git操作命令 4.提交 的過程中幾個命令的順序 5.git 學習資料.安裝完成後,滑鼠右鍵裡找到 git bash here 彈出乙個類似命令列的視窗,就說明git安裝成功!安裝完成後,可以使用git了。在上面的git bash命令視窗裡輸入以下命令,...
git簡易使用
git是分布式版本控制系統,和其他版本控制系統的主要差別在於git 只關心檔案資料的整體是否發生變化,而大多數其他系統則只關心檔案內容的具體差異。git 並不儲存這些前後變化的差異資料。git 更像是把變化的檔案作快照後,記錄在乙個微型的檔案系統中。每次提交更新時,它會縱覽一遍所有檔案的指紋資訊並對...
Git簡易使用
安裝git,安裝後右鍵滑鼠會多出來下圖標註的兩個標誌,證明安裝成功 點選git bash here 開啟類似於命令列的視窗建立新倉庫 以下參考自 建立新資料夾,開啟,然後執行 git init 以建立新的 git 倉庫。檢出倉庫 執行如下命令以建立乙個本地倉庫的轉殖版本 git clone path...