**版本控制是指對軟體開發過程中各種程式**、配置檔案及說明文件等檔案變更的管理,是軟體配置管理的核心思想之一。專案在開發過程中要用到相應的配置管理工具對配置項(包括各個階段的產物)進行變更控制,配置管理的使用取決於專案規模和複雜性及風險的水平。軟體的規模越大,配置管理就越顯得重要。
**版本控制工具我學習過svn和git,以下對他們進行一些總結。
一、svn的基本概念
svn 是乙個開源的版本控制系統, 有乙個**資料檔案庫(配置庫),管理著檔案每一次的變動。
在這裡插入描述
reporitory(版本庫) : 源**統一存放的地方;
checkout(提取):當你手上沒有源**的時候,你需要從版本庫checkout乙份;
commit(提交):當你已經修改了**,你就需要commit到版本庫;
update (更新):當你已經checkout了乙份源**, update一下你就可以和版本庫上的源**同步,你手上的**就會有最新的變更;
*如果兩個程式設計師同時修改了同乙個檔案呢, svn可以合併這兩個程式設計師的改動,實際上svn管理源**是以行為單位的,就是說兩個程式設計師只要不是修改了同一行程式,svn都會自動合併兩種修改。如果是同一行,svn會提示檔案confict, 衝突,需要手動確認。
git是乙個開源的分布式版本控制系統,用於敏捷高效地處理任何或大或小專案,它與cvs,svn不同,它採用了分布式版本庫的方式,不必伺服器端軟體支援。
分布式版本控制比集中式版本控制的優點:可避免單點故障。
單點故障:例在svn中,若伺服器崩潰了,客戶端上只有當前的資料,不能得到伺服器上的全部資料和歷史記錄了。
1、git與svn的區別:
1):git是分布式的,svn是集中式的;這是git與其他非分布式的版本控制系統最核心的區別;
2):git把內容按元資料方式儲存,svn是按檔案儲存,所以的資源控制系統都是把檔案的元資訊隱藏在乙個類似 .svn , .cvs等的檔案裡;
3):版本管理:svn採用的是增量式管理方式(只儲存每一次有修改的部分歷史),git採用檔案系統快照;
4):git分支與svn不同,分支在svn中一點也不特別,就是版本庫中的另外乙個目錄;分支在git中地位十分重要;(當git建立乙個分支時,只是建立乙個指標;而svn則是把所以檔案目錄都複製一遍)
5):git的內容完整性要優於svn,git的內容儲存使用的是sha-1雜湊演算法,這能確保**內容的完整性;
6):git沒有乙個全域性的版本號,而svn有,這是跟svn相比git缺少的最大的乙個特徵;
2、git的三棵「樹」----工作區,暫存區,版本庫
在這裡插入描述
*工作區:你的工作副本,就是你電腦上能看到的目錄;
*暫存區:(stage,index):一般存放在 .git目錄下的index檔案中;
*版本庫:工作區有乙個隱藏目錄 .git,這個不算工作區,而是git的版本庫;
3、git和**託管中心
**託管中心的任務:維護遠端庫。
1)區域網環境下:gitlab伺服器
2)外網環境下:github,碼雲
4、本地庫與遠端庫的互動
1)團隊內部協作
在這裡插入描述
2)跨團隊協作
在這裡插入描述
5、git命令列操作之本地庫操作
1)git init:初始化乙個git庫。
在這裡插入描述
a、建立乙個目錄作為我的git倉庫;
在這裡插入描述
b、進入到我的倉庫中
在這裡插入描述
c、初始化我的git庫
(注:.git目錄中存放的是本地庫相關的子目錄和檔案,不要刪除,也不要修改)
2)git status:檢視狀態
在這裡插入描述
剛建立了乙個空的git庫,什麼檔案也沒有寫,所以這裡是no commit yet(目前沒有提交任何東西);nothing to commit(也沒有什麼可提交的);
3)git add 檔名:將檔案放入暫存區
在這裡插入描述
a、新建了乙個檔案abc.txt,但還未提交,此時檔案被標記為紅色;
在這裡插入描述
b、使用add將檔案放入暫存區;再檢視狀態,檔案變為綠色;
在這裡插入描述
4)git commit 檔名:將暫存區中的檔案上傳至版本庫;
在這裡插入描述
在提交時直接寫上提交的附加資訊,這樣不用開啟vim編輯器
5)git log :版本歷史記錄
a、git log - -pretty=oneline :每條記錄只顯示一行
b、git log - -oneline
c、git reflog:(此種顯示方法,對於移動指標head有很大作用)
head @
6)前進後退
每一條歷史記錄都對應有乙個唯一的雜湊值
a、基於索引值:git reset - - hard 索引值(推薦使用);
b、使用^符號(只能往後退)
git reset - - hard head^ (退一步)
git reset - - hard head^^ (退2步)
git reset - - hard head~3 (退3步)……以此類推;
7)刪除檔案:rm 檔名
8)diff:比較檔案差異
a、git diff 檔名:將工作區中的檔案和暫存區的進行比較;
b、git diff [本地庫中的歷史版本] (檔名):將工作區中的檔案和本地庫歷史記錄比較;
c、不帶檔案比較多個檔案;
9)設定簽名
作用:區分不同開發人員的身份。
辨析:這裡設定的簽名和登入遠端庫(**託管中心)的賬戶,密碼沒有任何關係;
命令:a、專案級別/倉庫級別:僅在當前本地庫範圍內有效;
git config user.name 使用者名稱;
git config user.email 郵箱;
b、系統使用者級別:登入當前作業系統的使用者範圍;
git config - - global user.name 使用者名稱;
git config - - global user.email 郵箱;
級別優先順序:
就近原則:專案級別優先順序高於系統使用者級別,二者都有時採用專案級別;
二者都沒有是不允許的。
6、分支管理
在這裡插入描述
1)什麼是分支?
在版本控制過程中,使用多條線同時推進多個任務。
2)分支的好處:
a、同時並行推進多個功能開發,提高開發效率;
b、各個分支在開發過程中,如果某個分支開發失敗,不會影響其他分支;失敗的分支刪除重來即可;
3)與分支有關的操作
a、檢視分支:git branch --v;
b、建立分支:git branch 分支名;
c、刪除分支:git branch --d 分支名;
d、切換分支:git checkout 分支名;
e、合併分支:首先切換到接受修改的分支上;
再執行merge命令:git merge 要合併的子分支名;
f、解決合併時發生的衝突:
*編輯檔案刪除特殊符號;
*把檔案修改到滿意的程度;
*git add 檔名;
*git commit --m「日誌資訊」 (注:此時提交不能帶檔名)
8、push到遠端庫時衝突
如果不是基於github遠端庫的最新版所做的修改,不能推送,必須先拉取。拉取下來後如果進入衝突,則按照「分支衝突解決」操作。
版本管理及svn git工具
1 版本管理定義 版本管理是跟蹤軟體元件或配置資訊以及使用這些元件系統的不同版本的過程。版本管理也包括確保由不同開發者做出的變更不會彼此影響。因此,可以把版本管理過程看做是管理 線和基線的過程。2 版本管理功能 集中管理檔案,安全授權機制 檔案集中地存放在伺服器上,經系統管理員授權給各個使用者。使用...
關於svn git生成版本號指令碼的改進
之前寫了篇文章介紹使用指令碼生成svn git版本號的 svn git生成版本號 獲取svn版本號的方法有些不恰當,在不同版本的svn上會出現問題。這裡再對此進行完善。之前的指令碼是通過下面的命令獲取當前的svn的提交版本號 localver svn info cat n awk 下面給出結合了sv...
svn,git知識備份
echo on set repos 1 set user 2 set svn d program files visualsvn server bin svn.exe set dir d wwwroot static call svn update dir username password xx ...