Git是目前世界上最早進的分佈式版本控制系統python
git的兩大特色:git
sudo apt-get install git
安裝成功後,運行以下命令github
git
在ubuntu的命令行中,修改某臺機器的git配置,在家目錄下:數據庫
修改成註冊github時的郵箱,填寫用戶名,要求組員的用戶名不能重複django
git config --global user.name "zb" git config --global user.email "1273844671@qq.com"
最後能夠經過 git config -l 這個命令查看已配置的用戶名和郵箱信息ubuntu
git config -l
在實際項目開發中,按照以下步驟使用git進行代碼管理瀏覽器
註冊github帳戶,登陸後,點擊"start a project"緩存
在新頁面中,輸入項目的名稱django1,勾選'readme.md',點擊'create repository'服務器
添加成功後,轉到文件列表頁面,點擊'create new file'建立新文件框架
填寫文件名稱爲'.gitignore',代碼以下,表示項目中的pyc文件不須要被管理,由於這些文件代碼是根據py生成的
詳細的ignore文件能夠參考官方Python.gitignore文件
*.pyc .idea/ migrations/
建立完成後,文件列表以下:
點擊'SSH and GPG keys',添加ssh公鑰
刪除~/.ssh目錄,這裏存儲了舊的密鑰,沒有就不用刪除
rm -r .ssh
運行以下命令生成密鑰,本人沒寫,爲默認值
ssh-keygen -t rsa -C "Github帳號,能夠是用戶名,也能夠是郵箱地址"
ssh-keygen -t rsa -C "1273844671@qq.com"
查看公鑰內容,複製此內容
cat id_rsa.pub
回到瀏覽器中,填寫標題,粘貼公鑰,點擊ADD SSH KEY
公鑰添加成功後,以下圖
在瀏覽器中點擊進入github首頁,再進入項目倉庫的頁面
複製git地址
在命令行中複製倉庫中的內容
git clone git地址 ,選擇的要是httts,會要填Github的用戶名和密碼,要是使用SSH則不會。
cd Desktop/ mkdir jiangshi/ cd jiangshi/ git clone https://github.com/zb14755456464/django1.git cd bj_ttsx13/
sign_and_send_pubkey: signing failed: agent refused operation
eval "$(ssh-agent -s)" ssh-add
每一個員工開發期的代碼互不干擾,並行開發,則每人使用一條分支
項目開發中公用分支包括master、dev
建立分支,git branch 分支名稱
git branch dev
切換分支,git checkout 分支名稱
git checkout dev
將分支推送到服務器,git push origin 分支名稱,選擇的要是httts,會要填Github的用戶名和密碼,要是使用SSH則不會。
git push origin dev
將本地分支跟蹤服務器分支 git branch --set-upstream-to=origin/分支名稱 分支名稱.
主要的做用是:能夠知道本地的代碼,比服務器的新,仍是服務器的比本地的新,以及新幾個版本。通常是員工本身的代碼和本地的dev和並,在哪本地的dev分支和服務器的dev跟蹤。本身寫代碼的分支不用跟蹤。
git branch --set-upstream-to=origin/dev dev
建立並切換分支 git checkout -b 分支名稱
git checkout -b itcast
查看全部分支,當前分支前標記爲星*
git branch
刪除分支
git branch -d 分支名稱
git branch -d dev
當前項目分支一共有3個,分別爲master、dev、itcast,當前在itcast分支上工做
在克隆的目錄下建立項目,使用django框架
經理能夠把項目共用的部分添加進去,如setting中的配置文件要連接的數據庫,靜態文件和上傳文件的配置,把csrf註銷等
將文件代碼添加到暫存區
git add ./
將暫存區提交到倉儲區
git commit -m '搭建框架'
以上兩步運行效果以下圖
把經理的分支上傳到服務器
git push origin itcast
這時候除了經理的分支,有項目框架的代碼 ttsx 其他上網都沒有,以下圖所示
dev 分支沒有項目框架的代碼 ttsx
在這個階段,經理要作的就是把itcast的分支合併到共用的dev分支,這樣全部的分支就能夠從dev分支上取代碼.
先切換到dev分支
git checkout dev
將itcast分支的內容合併到當前的分支dev
git merge itcast
把dev分支的內容推送到服務器
git push origin dev
這時服務器的分支dev就有項目ttsx的代碼了
員工-開發
項目經理建立完成倉庫後,接下來項目組成員就要進行開發工做了
如下操做由每一個組員獨自完成
修改成註冊github時的郵箱,填寫用戶名,要求組員的用戶名不能重複
刪除~/.ssh目錄,這裏存儲了舊的密鑰
rm -r .ssh
運行以下命令生成密鑰
ssh-keygen -t rsa -C "Github帳號,能夠是用戶名,也能夠是郵箱地址"
查看公鑰內容,複製此內容
cat id_rsa.pub
將複製的公鑰發給項目經理,等項目經理在github上添加後,會將項目地址下發,而後就能夠參與到項目開發中進行後續操做
在克隆出來的目錄下,隱藏目錄.git存儲了服務器、分支、文件變動等信息
在這裏我是另外的開了一個終端模擬員工
根據項目經理提供的地址,如「git@github.com:bossliu2016/django1.git」,從github上將項目克隆到本地,默認對應的是master分支內容
克隆下來git clone 項目地址
git clone git@github.com:bossliu2016/django1.git
克隆後以下圖
之因此沒有ttsx的項目那是由於本地的分支默認只有一個master分支,
git branch
將github上的dev分支同步到本地,由於開發過程當中,全部組員都向這個分支上提交階段性代碼,並從這個分支獲取最新代碼,
意思就是根據遠程的dev分支建立本地的dev分支
git checkout -b dev origin/dev
員工建立一個本身的分支用於開發,這是在dev分支上建立的,他就擁有dev分支上的內容,而master分支上就沒有ttsx的項目
git checkout -b zj
我是在經理(jiangshi)本身用的分支上itcast作的增長,在pycharm中寫一些東西以下圖,查看增長的信息以下:
git checkout itcast git branch git status
把工做區增長的內容提交到緩存區,完成一個小的單元測試能夠git add ./ 一次,能夠屢次執行 git add ./ 操做.
git add ./
把緩存區的內容提交到版本庫中,這裏要說明一下,不要頻繁的提交,而是完成一個業務提交一次,這是由於不讓版本庫的日誌過多,後期找的麻煩.
git commit -m '建立用戶應用'
可使用git status 命令查看狀態
首先在物理上把文件給刪除了,而後執行git rm 刪除文件的路徑,主要是告訴版本庫,最後執行 git commit -m '刪除urls' 提交就好了.版本庫就會保存這個操做
在pycahrm中刪除urls以下圖'
能夠用git status 查看當前的狀態
git status
版本庫中不知道已經把它給刪除了,從這個版本中刪除
git rm ttsx/ttsx/urls.py git status
git commit -m '刪除urls' git status
把刪除的東西給恢復過來,只須要回到刪除以前的版本就好了,經過 git reser HEAD 或版本號
歷史版本的名稱:在Git中,用HEAD表示當前版本,版本號爲c27e22e,也就是最新的提交,上一個版本就是HEAD^,再上一個版本就是HEAD^^,固然往上100個版本寫100個^確定就麻煩了,提供了一種簡寫方式爲HEAD~100
查看倉庫區的歷史操做,
git log git reflog
git reset HEAD^
把倉庫區的操做區的記錄回到了暫存區的記錄
git status
git checkout -- ttsx/ttsx/urls.py git status
對比工做區和倉庫區中某版本某文件的不一樣
git diff HEAD -- 文件名
拿當前的版本庫和工做區中的urls進行對比,一致則什麼都沒有
git diff HEAD -- ttsx/ttsx/urls.py
在這裏我刪除urls的一條路徑在對比
git diff HEAD -- ttsx/ttsx/urls.py
上面的紅色表示當前的版本庫獨有這條路徑,而當前的工做區沒有這條路徑。,白色的內容表示的是共有的
在urls中在增長一條信息以下,在進行比較,這是當前的版本庫和工做區中的數據就各有各的不一樣
git diff HEAD -- ttsx/ttsx/urls.py
git add ./ git commit -m '建立商品應用' #提交後在比較就一致了 git diff HEAD -- ttsx/ttsx/urls.py git reflog
git diff d822f0a ce0bfe3 -- ttsx/ttsx/urls.py
回到建立用戶的版本
git reset ce0bfe3 git status git checkout -- ttsx/ttsx/urls.py git status
把代碼提交到服務器,
git branch git push origin itcast
git branch git pull
一個員工正在開發,還沒完成,出現了一個bug要解決,下面模擬在開發把一條url註釋
工做區並非乾淨的,由於功能沒作完也不能提交
git status
解決方法是:
保存現場
git stash git status
在master分支上出bug了,切換到master分支,注意不要直接在master 分支上作修改,要基於master分支新建一個分支如but001.
git checkout master git checkout -b but001
在 but001分支上修改了README,隨便寫了幾句話,就當BUG解決了
git status
git add ./ git commit -m '修改說明的bug'
修改好bug後,切換到master分支上合併修改bug的分支
git checkout master
git pull
這個合併只在修改bug的時候用,由於git 合併的時候默認的是採用 fast forward分支,它自己的記錄發生在記錄在本身的生上,不會記錄在合併後的分支上。
由於在開發過程當中,遇到的bug多,不會保留那麼多的分支,會把bug後的分支刪除,因此會採用 no fast forward合併.
git merge --no-ff -m '修改說明bug' but001
推送到服務器
git push origin master
刪除臨時分支bug001
git branch -d but001
.
切換回工做分支itcast
git checkout itcast
恢復現場,能夠繼續開發.
git stash pop
切換到 itcast分支
git checkout itcast
把上面模擬的一條url註釋改過來
這是在另外一個終端上,另外一個員工zj,寫的是商品模塊,
git add ./ git commit -m '開發商品應用'
首先把jiangshi的代碼合併到dev分支上
git status git branch git checkout dev #爲了保持本地的代碼和服務器上的一致 git pull git merge itcast
# 看本地有沒有要提交的
git status
git push origin dev
把員工zj的代碼合併到dev分支上
git branch git checkout dev # 它從服務器上獲取代碼,就會把員工jiangsji的代碼user獲取過來 git pull
合併本身的分支zj, 產生了衝突
git merge zj
上面產生的衝突的主要緣由是當前的版本包括user而合併來的分支版本不包括,合併來的分支版本包括goos而當前的版本不包括。
兩個員工相互協商後的解決以下:
協商後員工zj能夠提交修改後的代碼
git add ./ git commit -m '解決url衝突'
把最新的代碼提交
git push origin dev
合併完成後每一個人員工都獲取最新的代碼
jiangshi在dev分支上獲取最新的代碼
git checkout dev git pull
把最新的代碼合併到本身的itcast分支
git checkout itcast git merge dev
jiangshi的最新代碼既有本身的user也有zj的goods
員工zj也要獲取最新的代碼
git checkout dev git pull git checkout zj git merge dev
員工zj的最新代碼既有本身的good也有jiangshi的users