1. 簡單介紹
1.1. git起源
在1991年linus建立了Linux今後linux成爲服務器領域的佼佼者,大部分web服務器、郵件、數據庫各類服務器端程序都安裝在了linux上面運行,主要是由於它運行的快速、高效、利用率高,這樣一個優秀的系統並非一我的在維護,來自民間的衆多高手一塊兒在維護這linux發展,那麼這麼多分佈式世界各地的人如何共同維護如此多的Linux代碼呢? 這就須要一個分佈式代碼管理工具,linus使用過BitKeeper來管理代碼可是它是收費的,讓不少人用着不爽,後來linus本人就本身開發寫了一個工具來管理,這就是git的第一個版本。 後來隨着時間推移愈來愈多的開源軟件經過Git來管理,爲了把世界各地的開源項目管理起來,GitHub網站隨後上線了,不少流行的項目加入的此網站上面。例如咱們常用的jquery等。
1.2. 集中式vs分佈式
分佈式版本系統的最大好處之一是在本地工做徹底不須要考慮遠程庫的存在,也就是有沒有聯網均可以正常工做,而SVN在沒有聯網的時候是拒絕幹活的!當有網絡的時候,再把本地提交推送一下就完成了同步,真是太方便了! 集中式版本控制系統像CVS、SVN等,通常是將代碼部署到一臺服務器上面,每一個開發者在天天開發以前須要從服務器上面checkout下來最新的代碼,本地修改完後要 commit,要求本地電腦與服務器連着才能夠提交若是網絡帶寬慢則會很卡,記得曾經在公司提交代碼,幾十k的代碼每次提交都會卡住,很影響開發速度和開發質量。 相比之下,git本地就有倉庫,每一個開發者都有完整的代碼,能夠在上面進行各類開發,沒有網絡的延遲。提升開發效率。每一個人修改代碼以後會將修改的代碼互相推送給每一個人,一般爲了提升互相推送的傳輸效率每每搭建一臺git服務器來進行代碼的推送和拉回,能夠提升開發效率。
1.3. 各類git的介紹
- git是一個本地工具,用來關聯遠程的git服務器,同時本地也有時光穿梭的功能
- gitlab,github,碼雲等都是雲服務,是本地的git的一個鏡像。在不一樣電腦上就能夠拉取,同步。
1.4. git的安裝
通常大神都是用git的命令行工具,同時也有不少的圖形化工具:souretree等python
- windows 下的安裝
從官網上 :https://git-scm.com/ 上下載,傻瓜式安裝就行了jquery
- linux 下安裝
yum install gitlinux
2. 本地git的使用
2.1. 初始化本地倉庫
# 使用gitbash建立一個目錄,並進入到該目錄種 mkdir learngit cd learngit # 初始化倉庫 git init # 在該文件下多了一個.git的隱藏目錄 $ ll -a total 24 drwxr-xr-x 1 LH 197121 0 6月 28 14:22 ./ drwxr-xr-x 1 LH 197121 0 6月 28 14:20 ../ drwxr-xr-x 1 LH 197121 0 6月 28 14:22 .git/
2.2. 配置識別帳戶與密碼
這個帳戶密碼並非登入的帳號密碼,只是做爲一個識別碼,區分誰提交的。
每次commit的時候,都會帶上這個信息git
git config --global --list # 查看是否配置了 git config --global user.name hui git config --global user.email 232344@qq.com
2.3. git的操做
使用下面的命令就能夠完成一次版本的提交。github
git add filename # add dir 添加該文件下全部文件; add file1 file2 ; add . 添加全部全部的文件。 git commit -m '註釋消息' # -m是註釋的意思。注意的是 每次版本提交都要詳細標明每次變化
2.4. 三區:工做區、緩存區、版本區
- 工做區就是咱們工做的區域--咱們編寫代碼的地方
- 暫存區,index(stage) -- add的地方
- 版本區 -- commit的地方
2.5. 查看提交的版本信息
git log git log --pretty=oneline # 一行顯示,還有其餘參數本身研究
2.6. 版本回退-git reset
回退到上一個版本 git reset --hard HEAD^ 回退到上上個版本 git reset --hard HEAD^^ 回到到上100個版本 git reset --hard HEAD~100 回退到指定的版本 git reset --hard 具體的版本號(使用git log查看)
可是咱們回到上一個版本以後,使用git log 看不到以後的版本了,這個很蛋疼:web
- 使用命令行上面git log能夠看到以後的版本,能夠到那個版本去。
- 使用git reflog 能夠看到每一次操做的版本號(通常都使用這個)
2.7. 撤銷-git checkout
git checkout -- filename數據庫
分爲兩種狀況:windows
- 若是文件自修改後尚未add到緩存區,如今撤銷的話,工做區就會和版本庫一直
- 若是文件已經添加到緩存區,又作了修改。如今撤銷的話,就會回到緩存去的狀態
總之,就是讓文件回到最後一次git add 或 git commit的狀態緩存
3. 遠端倉庫
3.1. github設置
- 再建立帳號密碼以後,建立新倉庫
- public是公有的,你們都能看見。private是私有的,可是須要money
- init選項,最好不要選擇,否則會形成 本地的master 與 遠程的master不一致(本地沒readme,遠端有readme),推送的時候會發生錯誤。能夠先pull下來,讓本地與雲端都有readme。這樣能夠解決
- .gitignore是忽略某些文件:一些大文件,咱們不須要修改,但又比較大。再push的時候,就能夠忽略。增長速度 license是一個公開受權,沒啥用
3.2. 兩種鏈接方式
- 使用https的鏈接方式-適合單人
須要帳號密碼認證- 適合單人的項目bash
git remote add origin https://github.com/star-hui/gittest.git # origin是倉庫的名字,能夠隨意定義可是下面必須一直 git push -u origin master # 第一次推送的時候,須要把本地的mster分支與遠程的master分支合併。因此加上-u參數 git push origin msster # 以後每次鏈接不須要-u參數
- 使用ssh鏈接-適合團隊
直接使用公鑰,團隊成員每一個成員的公鑰都加入進來,就能夠一塊兒使用了。
# 第一步:在你本地先生成rsa的密鑰 ssh-keygen.exe -t rsa -C '123@qq.com' # 郵箱是團隊每一個成員本身的郵箱,只做爲標識符 # 第二步: 在上一步生成的rsa文件夾種,把.pub結尾的文件加入到github網站的ssh-key中 # 第三步: 本地進行關聯操做 git remote add louhui git@github.com:star-hui/sshtest.git # louhui只是倉庫名,:後面的爲項目地址,前面郵箱都使用Git官方郵箱。 # 第四部: 推送 # 第一次推送,須要合併本地與遠端的master分支 git push -u louhui master # 之後推送 git push -u louhui master
在上面其實咱們看出,本地的git能夠添加多個遠程倉庫,使用倉庫名來區分就能夠了。以下:
git remote add louhui | origin git push louhui | origin master # 使用不一樣的倉庫名,進行推送
3.3. 克隆雲端的項目
本地不須要新初始化一個倉庫,克隆下來就是一個倉庫了:
有兩種辦法,有些網絡場景被屏蔽的一些端口的時候,能夠從這兩種來選擇。
- 第一種直接使用遠端的倉庫https地址:進入到倉庫,直接複製下來
git clone https://github.com/star-hui/gittest
- 第二種使用ssh來鏈接克隆
git clone git@github.com:star-hui/sshtest.git
3.4. 分支管理
待完善