GIT和GITHUB
版本控制
Git是一個開源的分布式版本控制系統(tǒng),用以有效庶诡、高速的處理從很小到非常大的項目版本管理.Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件秤茅。Torvalds 開始著手開發(fā) Git 是為了作為一種過渡方案來替代 BitKeeper,后者之前一直是 Linux 內(nèi)核開發(fā)人員在全球使用的主要源代碼工具性穿。開放源碼社區(qū)中的有些人覺得 BitKeeper 的許可證并不適合開放源碼社區(qū)的工作读恃,因此 Torvalds 決定著手研究許可證更為靈活的版本控制系統(tǒng)。盡管最初 Git 的開發(fā)是為了輔助 Linux 內(nèi)核開發(fā)的過程囤采,但是我們已經(jīng)發(fā)現(xiàn)在很多其他自由軟件項目中也使用了 Git述呐。例如 最近就遷移到 Git 上來了,很多 Freedesktop 的項目也遷移到了 Git 上斑唬。
什么是git
GIT
Git 是一個開源的分布式版本控制軟件,用以有效市埋、高速的處理從很小到非常大的項目版本管理。
GitHub等
GitHub恕刘、GitCafe缤谎、BitBucket和GitLab等是基于Git版本控制的遠程文件托管平臺。
使用場景:
- 無遠程:在本地 .git 文件夾內(nèi)維護歷時文件
- 有遠程:在本地 .git 文件夾內(nèi)維護歷時文件褐着,同時也將歷時文件托管在遠程倉庫
PS:
集中式:遠程服務(wù)器保存所有版本坷澡,用戶客戶端有某個版本
分布式:遠程服務(wù)器保存所有版本,用戶客戶端有所有版本
git基本使用
基本使用
git init // 初始化文件
git status // 查看狀態(tài)
git config --global user.name "<NAME>" // 配置用戶
git config --global user.email "<EMAiL>" // 配置郵
git add 文件名
git commit -m "提交信息"
git ls-tree head //查看版本中所有文件
git ls-files -s //查看暫存區(qū)和版本中所有文件
stash
git stash // 將當(dāng)前做過的修改含蓉,臨時保存
git stash pop // 臨時修改放回工作區(qū)(有可能出現(xiàn)沖突)
branch分支
通常情況下频敛,主分支master用于上線,dev分支用于開發(fā)馅扣。
git branch dev // 創(chuàng)建分支branch
git branch // 查看當(dāng)前分支
git checkout dev // 切換分支
git merge bug // 合并bug分支到當(dāng)前分支
git branch -d bug // 刪除分支bug
遠程倉庫
公司搭建的常見的有g(shù)itlab斟赚。
遠程倉庫使用流程
1.創(chuàng)建代碼倉庫
2.添加代碼倉庫
git remote add origin https://github.com/zouruncheng/s4blogs.com
3.上傳代碼
git push origin master
3.從遠程下載代碼
git clone <github倉庫地址>
4. 寫代碼
5.上傳代碼
git push origin master
錯誤:refusing to merge unrelated histories
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
解決
git pull --allow-unrelated-histories origin master
協(xié)同開發(fā)
協(xié)同開發(fā)的工作模式
- 首先,可以試圖用
git push origin branch-name
推送自己的修改差油; - 如果推送失敗拗军,則因為遠程分支比你的本地更新,需要先用
git pull
試圖合并蓄喇; - 如果合并有沖突发侵,則解決沖突,并在本地提交妆偏;
- 沒有沖突或者解決掉沖突后刃鳄,再用
git push origin branch-name
推送就能成功!
當(dāng)你從遠程倉庫克隆時钱骂,實際上Git自動把本地的master
分支和遠程的master
分支對應(yīng)起來了叔锐,并且,遠程倉庫的默認名稱是origin
见秽。
要查看遠程庫的信息掌腰,用git remote
:
$ git remote
origin
推送分支
git push origin master // 推送主分支
git push origin dev //推送dev分支
-
master
分支是主分支,因此要時刻與遠程同步张吉; -
dev
分支是開發(fā)分支齿梁,團隊所有成員都需要在上面工作,所以也需要與遠程同步; - bug分支只用于在本地修復(fù)bug勺择,就沒必要推到遠程了创南,除非老板要看看你每周到底修復(fù)了幾個bug;
- feature分支是否推到遠程省核,取決于你是否和你的小伙伴合作在上面開發(fā)稿辙。
常見錯誤
error: failed to push some refs to 'git@github.com:triaquae/gitskills.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again. #提示你了,先把遠程最新的拉下來再提交你的
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
多人協(xié)作時气忠,當(dāng)2個開發(fā)者同時向遠程push代碼時邻储,后push的一方會出現(xiàn)錯誤,解決辦法也很簡單旧噪,Git已經(jīng)提示我們吨娜,先用git pull
把最新的提交從origin/dev
抓下來,然后淘钟,在本地合并宦赠,解決沖突米母,再推勾扭。
忽略特殊文件
在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore
文件,然后把要忽略的文件名填進去铁瞒,Git就會自動忽略這些文件妙色。
不需要從頭寫.gitignore
文件,GitHub已經(jīng)為我們準(zhǔn)備了各種配置文件慧耍,只需要組合一下就可以使用了燎斩。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore
忽略文件的原則是:
- 忽略操作系統(tǒng)自動生成的文件,比如縮略圖等蜂绎;
- 忽略編譯生成的中間文件、可執(zhí)行文件等笋鄙,也就是如果一個文件是通過另一個文件自動生成的师枣,那自動生成的文件就沒必要放進版本庫,比如Java編譯產(chǎn)生的
.class
文件萧落; - 忽略你自己的帶有敏感信息的配置文件践美,比如存放口令的配置文件。