天天看點

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

  Git是目前世界上最先進的分布式版本控制系統。

  SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而幹活的時候,用的都是自己的電腦,是以首先要從中央伺服器哪裡得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網路還可以,帶寬夠大,速度夠快,如果在網際網路下,如果網速慢的話,就納悶了。

Git是分布式版本控制系統,那麼它就沒有中央伺服器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間隻需把各自的修改推送給對方,就可以互相看到對方的修改了。

linux上作為我的git伺服器

我這裡使用的yum安裝

<code>[root@localhost ~]# yum install git</code>

也可以使用源碼安裝,需要安裝很多依賴包

擷取git版本,安裝成功

git安裝好後,建立 git 使用者,用來管理 Git 服務,并為 git 使用者設定密碼

禁止 git 使用者 ssh 登入伺服器,修改/etc/passwd檔案

<code>git:x:500:500::/home/git:/usr/bin/git-shell</code>

在Disk檔案夾下建立了一個檔案夾名為repository

<code>[root@localhost Disk]# mkdir repository</code>

将repository初始化為git倉庫

<code>[root@localhost repository]# git init</code>

該指令将建立一個名為 .git 的子目錄,是隐藏的,這個子目錄含有你初始化的 Git 倉庫中所有的必須檔案,這些檔案是 Git 倉庫的骨幹。

我從網上查到,如果初始化遠端倉庫的話,要使用這個指令:git init --bare repository.git

這樣初始化的倉庫并沒有.git目錄,隻有.git目錄下的檔案。

不使用--bare選項時,就會生成.git目錄以及其下的版本曆史記錄檔案,這些版本曆史記錄檔案就存放在.git目錄下;而使用--bare選項時,不再生成.git目錄,而是隻生成.git目錄下面的版本曆史記錄檔案,這些版本曆史記錄檔案也不再存放在.git目錄下面,而是直接存放在版本庫的根目錄下面

用"git init"初始化的版本庫使用者也可以在該目錄下執行所有git方面的操作。但别的使用者在将更新push上來的時候容易出現沖突。

解決辦法就是使用”git init --bare”方法建立一個所謂的裸倉庫,之是以叫裸倉庫是因為這個倉庫隻儲存git曆史送出的版本資訊,而不允許使用者在上面進行各種git操作,如果你硬要操作的話,隻會得到下面的錯誤(”This operation must be run in a work tree”),這個就是最好把遠端倉庫初始化成bare倉庫的原因。

說白了,就是會建立一個裸倉庫,裸倉庫沒有工作區,伺服器上的Git倉庫純粹是為了共享,是以不讓使用者直接登入到伺服器上去改工作區,并且伺服器上的Git倉庫通常都以.git結尾。

然後,把倉庫所屬使用者改為git:

<code>[root@localhost Disk]# chown -R git:git repository.git</code>

直接安裝即可,安裝後在開始菜單裡會有git bash、git GUI和git CMD

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

因為Git是分布式版本控制系統,是以需要填寫使用者名和郵箱作為一個辨別。

每一個 Git 的送出都會使用這些資訊,并且它會寫入到你的每一次送出中,不可更改。如果使用了 --global 選項,那麼該指令隻需要運作一次,因為之後無論你在該系統上做任何事情, Git 都會使用那些資訊。 當你想針對特定項目使用不同的使用者名稱與郵件位址時,可以在那個項目目錄下運作沒有 --global 選項的指令來配置。

打開git bash

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

如果想要檢查你的配置,可以使用 git config --list 指令來列出所有 Git 當時能找到的配置。

想要他們連接配接的話要建立證書登入

收集所有需要登入的使用者的公鑰,公鑰位于id_rsa.pub檔案中,把我們的公鑰導入到/home/git/.ssh/authorized_keys檔案裡,一行一個。 

打開windows的git bash,輸入ssh-keygen -t rsa -C “郵箱”,生成ssh私鑰和公鑰

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

此時 C:\Users\使用者名.ssh 下會多出兩個檔案 id_rsa 和 id_rsa.pub

id_rsa 是私鑰

id_rsa.pub 是公鑰

進入 /etc/ssh 目錄,編輯 sshd_config,打開以下三個配置的注釋:

儲存并重新開機 sshd 服務:

<code>[root@localhost ssh]# /etc/rc.d/init.d/sshd restart</code>

由 AuthorizedKeysFile 得知公鑰的存放路徑是 .ssh/authorized_keys,實際上是 $Home/.ssh/authorized_keys,由于管理 Git 服務的使用者是 git,是以實際存放公鑰的路徑是 /home/git/.ssh/authorized_keys

在 /home/git/ 下建立目錄 .ssh

然後把 .ssh 檔案夾的 owner 修改為 git,為.ssh和authorized_keys修改權限

将用戶端公鑰id_rsa.pub檔案的内容寫到伺服器端 /home/git/.ssh/authorized_keys 檔案裡

将伺服器上的/opt/repository/gittest.git庫克隆到本地 git clone [URL]git是使用者名@伺服器位址:倉庫路徑

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

可以看到本地上的伺服器倉庫了

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

你已經在本地建立了一個Git倉庫後,又想在伺服器建立一個Git倉庫,并且讓這兩個倉庫進行遠端同步

先在linux本地init一個倉庫,在裡面随意編輯一個檔案,在本地送出,然後連接配接遠端倉庫,将檔案push到伺服器上,由于遠端倉庫是沒有工作目錄的,是以看不到你送出的檔案,但是在伺服器上git log一下,可以看到你送出的曆史記錄

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

遠端庫的名字就是origin,這是Git預設的叫法,也可以改成别的。

把本地庫的内容推送到遠端,用git push指令,實際上是把目前分支master推送到遠端。

由于遠端庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支内容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化指令,git push origin master就行

要檢視遠端庫的資訊 使用 git remote

它會列出你指定的每一個遠端伺服器的簡寫。 如果你已經克隆了自己的倉庫,那麼至少應該能看到 origin - 這是 Git 給你克隆的倉庫伺服器的預設名字

要檢視遠端庫的詳細資訊 使用 git remote –v

會顯示需要讀寫遠端倉庫使用的 Git 儲存的簡寫與其對應的 URL,如果你的遠端倉庫不止一個,該指令會将它們全部列出

進入具體版本頁面後,根據Windows作業系統版本選擇相應的程式安裝包和中文語言包.

在桌面右鍵選擇tortoiseGit,選擇設定,設定使用者名和郵箱,跟在git bash是一樣的,此時設定的是全局的

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

進到本地倉庫目錄中可以針對項目設定局部配置

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

ssh key的步驟前面已經說完了,然後就可以克隆倉庫進行使用了

選擇你想要克隆倉庫的檔案夾,右鍵選擇Git克隆,等同于 git clone [url]

URL是你要克隆的伺服器版本庫路徑,目錄是你要克隆到你本地的路徑

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

填寫伺服器的url,确定,在克隆過程中會要求輸入git使用者的密碼,然後在本地生成了倉庫gittest,在gittest下面有.git目錄,就是本地的版本庫目錄了,如果上一步選擇了克隆成純版本庫,就不會有.git目錄了,在本地一般不這樣做

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令
初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

編輯一個檔案儲存,在空白處右鍵選擇TortoiseGit,選擇添加,加到暫存區,也就是git add,也可以在下一步裡面直接送出

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

右鍵選擇Git送出,填寫日志資訊,不然不能送出然後點送出,這一步是将檔案送出到你本地的倉庫,git中不能送出一個空檔案夾,裡面一定要有檔案才行

第一行預設送出到master分支,也可以選擇建立分支,送出到新分支上

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

沒有添加的檔案也可以直接送出到版本庫,也可以選擇不送出未添加的檔案

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

将檔案推送到遠端倉庫,右鍵選擇tortoiseGit,選擇推送,将檔案推送到伺服器倉庫上

可以選擇推送哪個分支上的資訊,也可以選擇推送到哪個遠端分支上

目标:選擇推送到哪個遠端端上,選擇管理,可以增加新的遠端端,也可以直接寫别的URL

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

确定推送

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

在伺服器倉庫下執行git log可以看到你推送的檔案,因為伺服器上是裸倉庫,是以沒有工作目錄,看不到推送的檔案

拉取和擷取的差別

拉取:git pull 在将遠端倉庫最新版本拉到本地的同時,将其合并到本地的目前 HEAD 中。

一般選擇非fast forward,會多生成一個commit 記錄,并強制保留分支的開發記錄,不會丢失分支資訊,這對于以後代碼進行分析特别有用。

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

擷取:git fetch 将遠端倉庫最新版本拉到本地,不會自動合并 ,絕不會更改任何本地分支

實際使用中 使用git fetch 更安全 在merge之前可以看清楚 更新情況 再決定是否合并

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

右鍵TortoiseGit,選擇建立分支,填入分支名稱,選擇在哪個分支上建立分支,如果勾選切換新分支,分支建立後就直接在新分支上工作了,否則在TortoiseGit中選擇切換分支

在分支上修改後送出到分支

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令
初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

切換回master分支,TortoiseGit選擇合并,選擇非快進式合并,合并後master分支上有了其他分支上送出的資訊

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

當主幹與分支修改了同一個檔案,合并時會産生沖突

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

打開檔案與在指令行中一樣,用&lt;&lt;&lt;&lt;&lt;&lt;&lt;,=======,&gt;&gt;&gt;&gt;&gt;&gt;&gt;标記出不同分支的内容

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

右鍵TortoiseGit中選擇解決沖突

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

輕按兩下該檔案進行修改,左邊視窗是分支上的内容,右邊視窗是master上的内容,你要在下面的視窗上解決沖突,修改正确的檔案内容,然後儲存,然後将解決後的檔案進行送出

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

紅色代表目前分支,綠色代表本地分支,淺×××代表遠端分支,×××代表标簽

可以看到各版本送出的資訊,及分支合并的資訊,還有檔案的操作狀态

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

顔色可以在設定中更改

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

可以在每一條資訊上右鍵選擇與上一版本比較差異

以上就是TortoiseGit的基本操作了

下面是一些指令行操作

根據需要,後期将會将svn上的資料遷移到git上

使用TortoiseGit克隆svn庫

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

URL是svn的位址,是你要克隆的檔案夾

因為我的svn庫不是标準的trunk、branch、tags結構,是以下面的不勾選,如果是标準的svn結構,請勾選

克隆需要一段時間,根據svn庫的大小而定

使用git init --bare svnrepo.git指令

先建立遠端倉庫,在本地倉庫内右鍵選擇TortoiseGit,設定,然後選擇遠端,在右側URL中填寫git伺服器倉庫位址,就是剛剛在git伺服器上建立的裸倉庫,origin是預設的遠端名字,然後點選确定

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

遠端建立好後,就可以将本地克隆到的倉庫推送到伺服器上了

在本地倉庫做一些修改,記住要先在本地進行送出,然後再推送到伺服器上

TortoiseGit—&gt;推送 就可以了,由于伺服器上是裸倉庫,是以沒有工作區,看不到檔案,git log一下就可以看到你剛才修改檔案的送出記錄了

我是在linux上操作的,算是本地倉庫吧,不涉及遠端庫;在linux上操作與在windows上相同

編輯一個readme.txt檔案,将檔案加入版本庫中

<code>[root@localhost repository]# git add readme.txt #将工作區中的檔案添加到暫存區了</code>

<code>[root@localhost repository]# git commit -m “送出readme”</code>

-m 是送出資訊,便于檢視送出了什麼東西,這一步是将暫存區中的檔案送出到倉庫了

這樣說明沒有任何檔案未送出,工作區是幹淨的

上面的指令告訴我們 readme.txt檔案已被修改,但是并沒有送出

可以看到,少了一行000

知道了對readme.txt檔案做了什麼修改後,我們可以放心的送出到倉庫了,送出修改和送出檔案是一樣的2步(第一步是git add 第二步是:git commit)。

如果嫌上面顯示的資訊太多的話,我們可以使用指令 git log –pretty=oneline

[root@localhost repository]# git reset --hard HEAD^ #回退到上一版本

可以看到删除000的操作沒有了

如果想要回退到上上個版本就把HEAD^ 改成 HEAD^^,以此類推

如果想回到100個版本之前的話,就git reset --hard HEAD~100

<code>[root@localhost repository]# git reset HEAD 版本号</code>

ffc46d2就是版本号

1.如果已經送出了的話,就直接回退到上一版本

2.如果沒有添加到暫存區的話,使用git checkout -- 檔案名 撤銷工作區的所有修改

<code>[root@localhost repository]# git checkout -- readme.txt</code>

3.如果已經添加到暫存區的話,想丢棄修改

<code>[root@localhost repository]# git reset HEAD readme.txt</code>

然後再重複第二步

我們在分支上修改了檔案内容送出後,在主分支上是看不到剛才修改的内容的

帶星号的則代表目前在該分支上

在分支上修改内容後,與主分支合并,合并後就統一了檔案内容

<code>[root@localhost repository]# git branch -d fenzhi</code>

當你在主分支上和其他分支上修改了同一個檔案并且都送出了,當在主分支上合并的時候就會産生沖突

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

檢視檔案内容是這樣的

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

Git用&lt;&lt;&lt;&lt;&lt;&lt;&lt;,=======,&gt;&gt;&gt;&gt;&gt;&gt;&gt;标記出不同分支的内容,其中&lt;&lt;&lt; HEAD是指主分支修改的内容,&gt;&gt;&gt;&gt;fenzhi 是指fenzhi上修改的内容

我們可以手動修改檔案,解決沖突,然後在送出到版本庫

git log --graph --pretty=oneline --abbrev-commit

初學Git及簡單搭建git伺服器和用戶端初識Git在linux上搭建git伺服器在windows上安裝git作為用戶端将linux服務端和windows用戶端關聯起來tortoiseGit的安裝使用svn遷移到git伺服器基礎指令

在開發中,會經常碰到bug問題,那麼有了bug就需要修複,每個bug都可以通過一個臨時分支來修複,修複完成後,合并分支,然後将臨時的分支删除掉。比如我在開發中接到一個404 bug時候,我們可以建立一個404分支來修複它,但是,目前的dev分支上的工作還沒有送出。

工作進行到一半時候,我們還無法送出,比如我這個分支bug要2天完成,但是404 bug需要5個小時内完成。怎麼辦呢?還好,Git還提供了一個stash功能,可以把目前工作現場 ”隐藏起來”,等以後恢複現場後繼續工作。

在你需要隐藏的dev分支下執行git stash,這時候雖然dev分支上的内容還沒有送出,但是git status看一下工作區是幹淨的,也就是dev的工作現場被隐藏了

現在建立404分支來修複bug了。首先我們要确定在哪個分支上修複bug,比如我現在是在主分支master上來修複的,現在我要在master分支上建立一個臨時分支修複完成後,切換到master分支上,并完成合并,最後删除404分支。

然後我們回到dev分支上幹活,工作區是幹淨的,那麼我們工作現場去哪裡呢?我們可以使用指令 git stash list來檢視下

工作區是幹淨的,那麼我們工作現場去哪裡呢?我們可以使用指令 git stash list來檢視下。Git把stash内容存在某個地方了,但是需要恢複一下,可以使用如下2個方法:

git stash apply恢複,恢複後,stash内容并不删除,你需要使用指令git stash drop來删除。

另一種方式是使用git stash pop,恢複的同時把stash内容也删除了。

本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/2060332,如需轉載請自行聯系原作者

繼續閱讀