git版本控制教程

一、概述

我們?cè)陂_發(fā)軟件的時(shí)候,常常會(huì)因?yàn)樾枨蟆⒐δ艿奶砑踊虺霈F(xiàn)bug而去修改代碼,隨著修改次數(shù)的增加,開發(fā)人員經(jīng)常會(huì)忘記之前的代碼,所以這個(gè)時(shí)候?qū)Υa進(jìn)行管理是非常必要的;對(duì)代碼管理最有效的辦法就是對(duì)每次修改代碼通過版本來標(biāo)識(shí)。 當(dāng)前出現(xiàn)幾種版本控制工具,其中最常用的有CVS,SVN,git, CVS是有著三十年以上的時(shí)間的考驗(yàn)。CVS是開放源代碼軟件世界的一個(gè)偉大杰作,有人認(rèn)為如今開源成功發(fā)展的幕后功臣之一當(dāng)CVS莫屬。Linux 的創(chuàng)始人 Linus 就把 Linux 的成功,歸因于 CVS。由于CVS功能強(qiáng)大,跨平臺(tái),支持并發(fā)版本控制,而且免費(fèi),所以它在全球中小型軟件企業(yè)中得到了廣泛使用。CVS最大的遺憾就是缺少相應(yīng)的技術(shù)支持,許多問題的解決需要自已尋找資料,甚至是研究源代碼。CVS是一個(gè)典型的服務(wù)器/客戶端軟件,有UNIX版本的CVS 、Linux版本的CVS和WINDOWS版本的CVS。CVS支持遠(yuǎn)程管理,項(xiàng)目組分布開發(fā)時(shí)一般都采用CVS。

SVN:CVS縱然易用,但也有一些與生俱來的缺點(diǎn),比如CVS不支持文件改名,只對(duì)文件控制版本而沒有針對(duì)目錄的管理,等等。之后CVS 的創(chuàng)始人之一在其現(xiàn)任公司的資助下開發(fā)了SubVersion,用以替代CVS。SubVersion 的設(shè)計(jì)目的就是針對(duì)CVS 的一些弱點(diǎn)進(jìn)行改進(jìn)。

Git和 CVS、SVN不同,是一個(gè)分布式的源代碼管理工具。Linux內(nèi)核的代碼就是用Git管理的。它很強(qiáng),也很快,筆者開始從事linux開發(fā),就選用git來管理自己的代碼。

二、安裝git

** **筆者使用的是centos linux;安裝git可通過yum install git命令;ubuntu下開發(fā)的用戶可使用apt-get install git;

或者在https://www.kernel.org/pub/software/scm/git/該網(wǎng)址下選擇最新版本的git,比如git-2.0.0.tar.xz,通過

wget https://www.kernel.org/pub/software/scm/git/git-2.0.0.tar.xz 下載git源碼;

解壓git-2.0.0.tar.xz文件

tar -xvf  git-2.0.0.tar.xz 
cd git-2.0.0
./configure
make 
make install


**三、開始使用git
**

** **安裝完git后,就可以開始使用它了;要想使用git,必須創(chuàng)建一個(gè)git目錄,常見的初始化git目錄有兩種,分別為git init, git --bare init;

git init初始化會(huì)生成一個(gè)工作目錄,該工作目錄負(fù)責(zé)管理項(xiàng)目的資源和項(xiàng)目的版本控制,目錄下有一個(gè).git目錄就是負(fù)責(zé)項(xiàng)目的版本管理,

git --bare init初始化后直接在目錄下生成一些與.git文件夾下同樣的文件,該目錄只負(fù)責(zé)項(xiàng)目的版本控制,而項(xiàng)目的資源可存放在別的機(jī)子上;

1、使用git init命令

首先創(chuàng)建一個(gè)文件夾,在文件夾下git init初始化git庫


mkdir /home/gitpro/test
cd /home/gitpro/test
git init

初始化后會(huì)在該文件夾下面生成.git文件夾,該文件夾就是負(fù)責(zé)git版本管理的;然后在/home/pro目錄下克隆該git目錄,輸入命令如下:

git clone /home/gitpro/test 

會(huì)在/home/pro目錄下創(chuàng)建一個(gè)test目錄,并在/home/pro/test中添加一個(gè)test文件,隨便填寫幾個(gè)內(nèi)容:

git test repo

保存內(nèi)容后

git add test
git commit -m 'add a test file'
git push

當(dāng)git push的時(shí)候會(huì)出現(xiàn)錯(cuò)誤:

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly

說的是需要我們指定一個(gè)分支,出現(xiàn)該問題的原因是因?yàn)槲覀冊(cè)趧傞_始git init初始化目錄的時(shí)候,該目錄中不會(huì)自動(dòng)創(chuàng)建分支,可查看.git目錄下的HEAD文件,HEAD是指向當(dāng)前的分支,

cat HEAD

發(fā)現(xiàn)內(nèi)容是ref: refs/heads/master,當(dāng)是進(jìn)入.git目錄下的refs/heads下沒有看見master文件,說明確實(shí)是沒有創(chuàng)建分支的原因,解決方法為:

可以在git init的目錄中隨便添加一個(gè)文件,建議添加.gitignore文件,內(nèi)容如下:

*.bak

該文件名是git的過濾規(guī)則文件,git在遇到bak格式的文件會(huì)放棄掉該文件,即便是用戶git add過來;

git add .gitignore
git commit -m 'create master'

之后我們?cè)趓efs/heads下可以發(fā)現(xiàn)master,說明已經(jīng)成功創(chuàng)建分支;注意:因?yàn)橐呀?jīng)在git init的目錄commit下,所以就不需要輸入git push命令,

接下來在/home/pro/test,輸入

git push

又發(fā)現(xiàn)了一個(gè)問題發(fā)現(xiàn)又出現(xiàn)新的問題:

remote: error: refusing to update checked out branch: refs/heads/master  
remote: error: By default, updating the current branch in a non-bare repository  
remote: error: is denied, because it will make the index and work tree inconsistent  
remote: error: with what you pushed, and will require 'git reset --hard' to match  
remote: error: the work tree to HEAD.  
remote: error:   
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to  
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into  
remote: error: its current branch; however, this is not recommended unless you  
remote: error: arranged to update its work tree to match what you pushed in some  
remote: error: other way.  
remote: error:   
remote: error: To squelch this message and still keep the default behaviour, set  
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

會(huì)出現(xiàn)該問題的原因是因?yàn)?,git初始化后,默認(rèn)情況下是不允許遠(yuǎn)程git push操作的,可以修改.git/config,在該文件中添加如下內(nèi)容:

[receive]
    denyCurrentBranch = ignore

保存后,在/home/pro/test下git push就可以成功了

其實(shí)在初始化時(shí),沒有創(chuàng)建分支的情況下,還可以在/home/pro/test下輸入

git push origin master

該命令會(huì)git自動(dòng)創(chuàng)建一個(gè)分支,而不需要在/home/gitpro/test下創(chuàng)建一個(gè)文件后commit這么麻煩

2、git --bare init

創(chuàng)建一個(gè)裸版本庫:

mkdir /home/gitpro/bare
cd /home/gitpro/bare
git --bare init

在目錄下生成與git init初始化時(shí)生成.git文件夾下一模一樣的內(nèi)容,接著克隆該裸版本庫:

cd /home/pro
git clone /home/gitpro/bare

在該目錄下隨便創(chuàng)建一個(gè)文件,之后add ,commit到版本庫中,注意這時(shí)git push會(huì)出現(xiàn)沒有分支的錯(cuò)誤,可使用

git push origin master
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容