Django工具:Git简介与基本操作
1.Git簡(jiǎn)介:
1.Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)
網(wǎng)址:http://github.com
2.總結(jié)git的兩大特點(diǎn):
- 版本控制:可以解決多人同時(shí)開發(fā)的代碼問題,也可以解決找回歷史代碼的問題
- 分布式:Git是分布式版本控制系統(tǒng),同一個(gè)Git倉(cāng)庫(kù),可以分布到不同的機(jī)器上。
?
2.經(jīng)理創(chuàng)建
2.1安裝配置:
?
- 安裝
sudo apt-getinstall git
- 安裝成功后,運(yùn)行如下命令
git
?
配置
- 在ubuntu的命令vi .gitconfig行中,修改某臺(tái)機(jī)器的git配置
- 修改為注冊(cè)github時(shí)的郵箱,填寫用戶名,要求組員的用戶名不能重復(fù)
?
- git四部分的交互方式如下圖
?
?
2.2創(chuàng)建倉(cāng)庫(kù)
- 注冊(cè)github賬戶,登錄后,點(diǎn)擊"start a project"
- 在新頁(yè)面中,輸入項(xiàng)目的名稱,勾選'readme.md',點(diǎn)擊'create repository'
- 添加成功后,轉(zhuǎn)到文件列表頁(yè)面,點(diǎn)擊'create new file'創(chuàng)建新文件
- 填寫文件名稱為'.gitignore',代碼如下,表示項(xiàng)目中的pyc文件不需要被管理,因?yàn)檫@些文件代碼是根據(jù)py生成的
- *.pyc
.idea/
migrations/
- 點(diǎn)擊'preview'查看預(yù)覽,點(diǎn)擊'create new file'完成創(chuàng)建
?
2.3添加ssh賬戶
- 如果某臺(tái)機(jī)器需要與github上的倉(cāng)庫(kù)交互,那么就要把這臺(tái)機(jī)器的ssh公鑰添加到這個(gè)github賬戶上
- 點(diǎn)擊賬戶頭像后的下拉三角,選擇'settings'
- 點(diǎn)擊'SSH and GPG keys',添加ssh公鑰
?
生成git密鑰
- 刪除~/.ssh目錄,這里存儲(chǔ)了舊的密鑰
rm -r .ssh
?
運(yùn)行如下命令生成密鑰
ssh-keygen -trsa -C "Github賬號(hào),可以是用戶名,也可以是郵箱地址"
?
- 查看公鑰內(nèi)容,復(fù)制此內(nèi)容
cat id_rsa.pub
?
- 回到瀏覽器中,填寫標(biāo)題,粘貼公鑰
?
2.4克隆項(xiàng)目
- 在瀏覽器中點(diǎn)擊進(jìn)入github首頁(yè),再進(jìn)入項(xiàng)目倉(cāng)庫(kù)的頁(yè)面
- 復(fù)制git地址
- 在命令行中復(fù)制倉(cāng)庫(kù)中的內(nèi)容
git clone git地址
?
錯(cuò)誤處理
- 提示錯(cuò)誤信息如下:
sign_and_send_pubkey: signingfailed: agent refused operation
- 錯(cuò)誤原因:在ssh賬戶中沒有加入新生成的密鑰
- 解決:將密碼加入ssh賬戶
- 逐條運(yùn)行如下命令
eval "$(ssh-agent-s)"
ssh-add
?
2.5創(chuàng)建項(xiàng)目分支
- 每個(gè)員工開發(fā)期的代碼互不干擾,并行開發(fā),則每人使用一條分支
- 項(xiàng)目開發(fā)中公用分支包括master、dev
- 分支master用于發(fā)布,默認(rèn)分支,當(dāng)需要發(fā)布時(shí)將dev分支合并
- 分支dev開發(fā)階段性的代碼合并,每個(gè)階段的工作完成后需要進(jìn)行一次,控制項(xiàng)目的進(jìn)度
- 成員分支用于每個(gè)項(xiàng)目成員的代碼開發(fā),實(shí)現(xiàn)不交叉
?
- 創(chuàng)建分支:git branch 分支名稱
- 切換分支:git checkout 分支名稱
- 將分支推送到服務(wù)器:git push origin 分支名稱
- 將本地分支跟蹤服務(wù)器分支
git branch--set-upstream-to=origin/分支名稱 分支名稱
?
- 創(chuàng)建并切換分支:git checkout -b 分支名稱
- 查看所有分支,當(dāng)前分支前標(biāo)記為星*:git branch
- 刪除分支:git branch -d 分支名稱
沒有例子,沒錯(cuò),就是沒有例子,如果你刪除了,我也找不回來(lái)喲
?
2.6搭建項(xiàng)目框架
- 當(dāng)前項(xiàng)目分支一共有3個(gè),分別為master、dev、itcast,當(dāng)前在itcast分支上工作
- 在克隆的目錄下創(chuàng)建項(xiàng)目,使用django框架
- 將文件代碼添加到暫存區(qū):git add dailyfresh/
將暫存區(qū)提交到倉(cāng)儲(chǔ)區(qū):git commit -m '搭建框架'
?
?
2.7上傳分支
- 當(dāng)從遠(yuǎn)程倉(cāng)庫(kù)克隆時(shí),實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái)
- 遠(yuǎn)程倉(cāng)庫(kù)的默認(rèn)名稱是origin
- 推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù),推送時(shí)要指定本地分支,這樣,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上
git pushorigin 分支名稱
?
- 當(dāng)前文件在python分支上,所以推送python分支
gitpush origin python
?
- 將python分支合并到dev分支
gitcheckout dev
git merge python
?
- 推送dev分支:git push origin dev
- 將dev分支合并到master分支
git checkoutmaster
git merge dev
?
- 推送master分支:git push origin master
?
3.員工—開發(fā)
?
3.1添加ssh賬戶
生成git密鑰
- 刪除~/.ssh目錄,這里存儲(chǔ)了舊的密鑰
rm -r .ssh
?
運(yùn)行如下命令生成密鑰
ssh-keygen -trsa -C "Github賬號(hào),可以是用戶名,也可以是郵箱地址"
?
- 查看公鑰內(nèi)容,復(fù)制此內(nèi)容
cat id_rsa.pub
?
- 回到瀏覽器中,填寫標(biāo)題,粘貼公鑰
?
3.2本地克隆
- 根據(jù)項(xiàng)目經(jīng)理提供的地址,如“git@github.com:bossliu2016/django1.git”,從github上將項(xiàng)目克隆到本地,默認(rèn)對(duì)應(yīng)的是master分支
git clone 項(xiàng)目地址
?
3.3同步分支
- 以自己的姓名創(chuàng)建分支,如果此分支已經(jīng)存在可以添加數(shù)字后綴,具體要與項(xiàng)目經(jīng)理商量
git checkout -bzhjia
- 將本地分支推送到服務(wù)器
git push originzhjia
- 將本地分支跟蹤服務(wù)器分支
git branch--set-upstream-to=origin/分支名稱 分支名稱
?
- 將github上的dev分支同步到本地,因?yàn)殚_發(fā)過程中,所有組員都向這個(gè)分支上提交階段性代碼,并從這個(gè)分支獲取最新代碼
git checkout -bdev origin/dev
?
3.4開發(fā)管理
- 上面的操作,只有我們?cè)诩尤腠?xiàng)目的第一天需要進(jìn)行,只操作一次就夠了
- 接下來(lái)的操作,是我們每天開發(fā)中都要進(jìn)行的操作,這是必須做到熟練操作的命令
- 當(dāng)前用戶以zhjia分支進(jìn)行開發(fā)
git checkout zhjia
?
- 本地倉(cāng)庫(kù)分為三部分:工作區(qū),暫存區(qū),倉(cāng)庫(kù)區(qū),其中暫存區(qū)、倉(cāng)庫(kù)區(qū)是版本庫(kù)部分
?
?
3.5工作區(qū)與暫存區(qū)
?
添加
git add 文件1 文件2 ...
git add 目錄
?
撤銷? :git checkout-- 文件名
?
3.6暫存區(qū)與倉(cāng)庫(kù)區(qū)
- 倉(cāng)庫(kù)區(qū)表示個(gè)人開發(fā)的一個(gè)小階段的完成,倉(cāng)庫(kù)區(qū)中記錄的各版本是可以查看并回退的,但是在暫存區(qū)的版本一旦提交就再也沒有了
- 查看暫存區(qū)未提交的記錄:git status
- 將暫存區(qū)的記錄提交到倉(cāng)庫(kù)區(qū)
git commit -m'本次提交的說(shuō)明信息'
?
3.7本地與服務(wù)器
?
獲取
- 建議:在每天開始編寫代碼前,先與服務(wù)器同步一次;或者在公用分支如dev上開發(fā)時(shí),建議先同步后開發(fā)
- 1.切換到dev分支:git checkout dev
- 2.獲取代碼,如果dev分支上有更新的記錄則會(huì)同步到本地:git pull
- 3.切換回自己的分支繼續(xù)開發(fā):git checkout zhujiao
推送
- 建議:在每天下班前將當(dāng)天開發(fā)推送到服務(wù)器,這樣可以在服務(wù)器中存儲(chǔ)一個(gè)備份,即使本機(jī)出問題,在服務(wù)器上還能存在代碼備份
- git push origin zhjia
?
合并分支
- 一個(gè)功能模塊開發(fā)完了,合并到dev分支
- 1.切換到dev分支:git checkout dev
- 2.獲取代碼,如果dev分支上有更新的記錄則會(huì)同步到本地:git pull
- 3.合并:git merge zhjia
- 4.添加、提交并推送:git push origin dev
- 5.切換回工作分支:git checkout zhujiao
- 6.在最新代碼上繼續(xù)開發(fā),所以將dev分支合并到zhujiao分支
git merge dev
?
解決沖突
- 建議:在更改公用文件如dailyfresh/urls.py時(shí)需要操作dev分支,因?yàn)榇蠹叶伎梢圆僮鱠ev分支,所以在合并時(shí)可能出現(xiàn)沖突
- 沖突的示例如下,修改dailyfresh/urls.py文件
?
項(xiàng)目經(jīng)理的操作
- 1.項(xiàng)目經(jīng)理負(fù)責(zé)前臺(tái)的開發(fā),需要修改dailyfresh/urls.py文件
git checkout dev
?
- 2.在dailyfresh/urls.py文件中添加一條url
- 3.添加并提交
git adddailyfresh/urls.py
git commit -m '配置前臺(tái)url'
?
- 4.同步到服務(wù)器
git push origindev
?
員工的操作
- 1.員工負(fù)責(zé)用戶模塊的開發(fā),需要修改dailyfresh/urls.py文件
git checkout dev
- 2.在dailyfresh/urls.py文件中添加一條url
- 3.添加并提交
git adddailyfresh/urls.py
git commit -m '配置用戶模塊url'
- 4.向服務(wù)器推送:git push origin dev
- 5.推送時(shí)發(fā)現(xiàn)出錯(cuò)誤了,根據(jù)提示,需要先獲取服務(wù)器的變更
git pull
- 發(fā)現(xiàn)有沖突,而且自動(dòng)合并沖突失敗,需要手動(dòng)合并沖突,指向dailyfresh/urls.py文件
- 6.沖突解決完成,再次添加、提交、推送
git add dailyfresh/urls.py
git commit -m '配置用戶模塊url-解決沖突后'
git push origin dev
?
3.8歷史
- 查看倉(cāng)庫(kù)區(qū)的歷史操作
git reflog
?
- 對(duì)比工作區(qū)和倉(cāng)庫(kù)區(qū)中某版本某文件的不同
git diff HEAD-- 文件名
?
- 將上面的代碼添加提交
git adddf_user/models.py
git commit -m '修改模型類的str方法為name屬性'
?
回退
- 回退歷史版本到暫存區(qū)
- 將df_user/models.py文件的更改完成添加、提交
git adddf_user/models.py
git commit -m '修改模型類'
- 查看當(dāng)前的暫存區(qū)狀態(tài):git status
- 重置版本:git reset 版本號(hào)
- 再次查看當(dāng)前的暫存區(qū)狀態(tài):git status
- 可以再將暫存區(qū)的內(nèi)容恢復(fù)到工作區(qū)
git checkout --df_user/models.py
?
3.9刪除
- 在ide中將文件刪除
- 從工作區(qū)到暫存區(qū)提交:git rm 文件名
- 從暫存區(qū)到倉(cāng)庫(kù)區(qū)提交:git commit -m '說(shuō)明信息'
1.創(chuàng)建df_user/a.py的變更添加到暫存區(qū),再提交到倉(cāng)庫(kù)區(qū)
git adddf_user/a.py
git commit -m '創(chuàng)建文件a'
- 2.在ide中將df_user/a.py文件刪除,然后在暫存區(qū)刪除
git rmdf_user/a.py
- 3.提交暫存區(qū)的記錄到倉(cāng)庫(kù)區(qū)
git commit -m'刪除文件a'
?
3.10Debug分支
- 在項(xiàng)目的正常開發(fā)過程中,之前發(fā)布過的版本可能很會(huì)出bug,這時(shí)就需要停下來(lái)現(xiàn)在的開發(fā)任務(wù),先去修改bug,完成后再回來(lái)繼續(xù)開發(fā)任務(wù)
- git中stash提供了保存現(xiàn)場(chǎng)的功能,可以把當(dāng)前工作區(qū)、暫存區(qū)中的內(nèi)容不需要提交而保存下來(lái),轉(zhuǎn)而去做bug修復(fù),完成后再恢復(fù)現(xiàn)場(chǎng),繼續(xù)開發(fā)工作
- 將語(yǔ)言和時(shí)區(qū)改為
LANGUAGE_CODE ='zh-Hans'
TIME_ZONE = 'Shanghai/Asia'
?
- 1.查看當(dāng)前狀態(tài):git status
- 2.保存現(xiàn)場(chǎng):git stash
- 再查看當(dāng)前狀態(tài),發(fā)現(xiàn)是干凈的:git status
- 3.切換到master分支:git checkout master
- 4.新建臨時(shí)分支用于修復(fù)bug,用完后會(huì)刪除此分支
git checkout -bbug001
5.修改dailyfresh/settings.py文件的語(yǔ)言和時(shí)區(qū)
- 添加:將工作區(qū)中的更改添加到暫存區(qū)
git adddailyfresh/settings.py
- 提交:將暫存區(qū)的內(nèi)容提交到倉(cāng)庫(kù)區(qū)
git commit -m'修復(fù)時(shí)區(qū)語(yǔ)言'
- 6.切換回master分支:git checkout master
- 7.將bug001分支合并到master分支
- 因?yàn)榕R時(shí)分支用完后會(huì)被刪除,無(wú)法通過分支查詢歷史記錄,所以使用臨時(shí)分支時(shí)需要使用no-ff的方式,同時(shí)寫上-m備注信息
git merge--no-ff -m "修復(fù)bug-語(yǔ)言時(shí)區(qū)" bug001
- 推送到服務(wù)器:git push
- 8.刪除臨時(shí)分支bug001:git branch -d bug001
- 9.切換回工作分支zhjia:git checkout zhjia
- 查看現(xiàn)場(chǎng)列表:git stash list
- 恢復(fù)現(xiàn)場(chǎng):git stash pop
- 恢復(fù)現(xiàn)場(chǎng)后查看工作狀態(tài):git status
?
?
4.0經(jīng)理-發(fā)布
- 項(xiàng)目開發(fā)完一個(gè)版本后,需要進(jìn)行項(xiàng)目的合并與發(fā)布
- 項(xiàng)目合并與發(fā)布,需要項(xiàng)目經(jīng)理和組員一起來(lái)完成,每個(gè)人將開發(fā)的分支逐個(gè)合并到dev分支,如果有沖突則解決沖突,在dev上的代碼經(jīng)過測(cè)試沒有問題后,則由經(jīng)理合并到master分支,完成發(fā)布
- 實(shí)現(xiàn)發(fā)布主要遵守如下步驟:
- 每個(gè)人逐個(gè)合并分支到dev
- 經(jīng)理合并dev到master并發(fā)布
- 每個(gè)人獲取最新的dev分支、master分支
?
4.1逐個(gè)合并
- 1.切換到dev分支:git checkout dev
- 2.獲取最新記錄代碼:git pull
- 3.合并,將自己編寫的代碼加入進(jìn)來(lái),如果有沖突則與上一個(gè)組員商量解決沖突
- 如果沒有沖突則可以跳過4、5步
git merge 分支
- 4.添加
- 注意:在項(xiàng)目的根級(jí)目錄下,即README.md所在的目錄下
git add ./
- 5.提交:git commit -m 'zhjia發(fā)布v1.0'
- 6.推送:git push origin dev
?
4.2經(jīng)理合并
- 所有成員都完成合并后,接下來(lái)是項(xiàng)目經(jīng)理要執(zhí)行的操作
- 1.切換到dev分支:git checkout dev
- 2.獲取最新:git pull
- 3.切換到master分支:git checkout master
- 4.合并dev分支到master分支
- 如果有沖突,則找相應(yīng)的組同解決沖突
- 如果沒有沖突則可以跳過5、6步
git merge dev
- 5.添加
- 注意:在項(xiàng)目的根級(jí)目錄下,即README.md所在的目錄下
git add ./
- 6.提交:git commit -m '發(fā)布v1.0'
- 7.打標(biāo)簽
- 標(biāo)簽就是為了給一堆數(shù)字的版本號(hào),起一個(gè)容易記住的名字,一般用于master分支:git tag v1.0
- 8.推送:git push
?
4.3逐個(gè)獲取
- 現(xiàn)在最新的代碼已經(jīng)有了,接下來(lái)在這個(gè)版本代碼基礎(chǔ)上繼續(xù)開發(fā),每個(gè)人都要獲取最新的代碼
- 1.切換到master分支:git checkout master
- 2.獲取:git pull
- 3.切換到dev分支:git checkout dev
- 4.將master分支合并到dev分支:git merge master
- 5.切換到自己工作的分支如zhjia分支:git checkout zhjia
- 6.將dev分支合并到工作分支如zhjia分支:git merge dev
總結(jié)
以上是生活随笔為你收集整理的Django工具:Git简介与基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 以太坊 智能合约_web3j教
- 下一篇: 多进程模块multiprocessing