26 版本控制之git的使用(四)

2021-07-05 14:02:21 字數 2868 閱讀 5873

git是乙個分布式的版本控制系統,由linux的創始人linus研發,可以管理專案的修改!

本日誌根據廖雪峰的官方**的學習課程來學習git!

本章沒有經過實踐,資料從網上整理複製而來

我們一直用github作為免費的遠端倉庫,如果是個人的開源專案,放到github上是完全沒有問題的。其實github還是乙個開源協作社群,通過github,既可以讓別人參與你的開源專案,也可以參與別人的開源專案。

在github出現以前,開源專案開源容易,但讓廣大人民群眾參與進來比較困難,因為要參與,就要提交**,而給每個想提交**的群眾都開乙個賬號那是不現實的,因此,群眾也僅限於報個bug,即使能改掉bug,也只能把diff檔案用郵件發過去,很不方便。

但是在github上,利用git極其強大的轉殖和分支功能,廣大人民群眾真正可以第一次自由參與各種開源專案了。

如何參與乙個開源專案呢?比如人氣極高的bootstrap專案,這是乙個非常強大的css框架,你可以訪問它的專案主頁 ,點「fork」就在自己的賬號下轉殖了乙個bootstrap倉庫,然後,從自己的賬號下clone:

git clone [email protected]:michaelliao/bootstrap.git
一定要從自己的賬號下clone倉庫,這樣你才能推送修改。如果從bootstrap的作者的倉庫位址[email protected]:twbs/bootstrap.git轉殖,因為沒有許可權,你將不能推送修改。

如果你想修復bootstrap的乙個bug,或者新增乙個功能,立刻就可以開始幹活,幹完後,往自己的倉庫推送。

如果你希望bootstrap的官方庫能接受你的修改,你就可以在github上發起乙個pull request。當然,對方是否接受你的pull request就不一定了。

小結遠端倉庫實際上和本地倉庫沒啥不同,純粹為了7x24小時開機並交換大家的修改。

github就是乙個免費託管開源**的遠端倉庫。但是對於某些視源**如生命的商業公司來說,既不想公開源**,又捨不得給github交保護費,那就只能自己搭建一台git伺服器作為私有倉庫使用。

搭建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
第五步,禁用shell登入:

git:

x:1001

:1001

:,,,:/home/git

:/bin/bash

#改為:

git:

x:1001

:1001

:,,,:/home/git

:/usr/bin/git-shell

這樣,git使用者可以正常通過ssh使用git,但無法登入shell,因為我們為git使用者指定的git-shell每次一登入就自動退出。

第六步,轉殖遠端倉庫:

現在,可以通過git clone命令轉殖遠端倉庫了,在各自的電腦上執行:

$ git clone git@server:/srv/sample.git

cloning into 'sample'

...

剩下的推送就簡單了。

管理公鑰

如果團隊很小,把每個人的公鑰收集起來放到伺服器的/home/git/.ssh/authorized_keys檔案裡就是可行的。如果團隊有幾百號人,就沒法這麼玩了,這時,可以用gitosis來管理公鑰。

這裡我們不介紹怎麼玩gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的linux管理員問題不大。

管理許可權

有很多不但視源**如生命,而且視員工為竊賊的公司,會在版本控制系統裡設定一套完善的許可權控制,每個人是否有讀寫許可權會精確到每個分支甚至每個目錄下。因為git是為linux源**託管而開發的,所以git也繼承了開源社群的精神,不支援許可權控制。不過,因為git支援鉤子(hook),所以,可以在伺服器端編寫一系列指令碼來控制提交等操作,達到許可權控制的目的。gitosis就是這個工具。

這裡我們也不介紹gitosis了,不要把有限的生命浪費到許可權鬥爭中。

小結搭建git伺服器非常簡單,通常10分鐘即可完成;

要方便管理公鑰,用gitosis;

要像svn那樣**地控制許可權,用gitolite。

Git學習使用(三) 版本控制

首先,要學會使用git status檢視git倉庫的狀態。我們先更改readme.txt檔案為 git is a distributed version control system.git is free software.接下來執行git status git status 位於分支 maste...

Git學習01 版本控制

版本控制是一種記錄乙個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。主要可以分為以下三類 1.1 本地版本控制系統 許多人習慣用複製整個專案目錄的方式來儲存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的好處就是簡單。不過壞處也不少 有時候會混淆所在的工作目錄,一旦弄錯檔案丟了資...

Git學習筆記2 版本控制

1.版本回退 head 當前指標 head 表示向上一層 head n 表示向上n層 git reset hard head 返回到上乙個版本 git reset hard 94bf 返回到指定版本,94bf是指定版本的id穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。要重返未...