Django快速開發(fā)可定制的辦公系統(tǒng)實(shí)戰(zhàn)(1):Git的使用

?為什么在項(xiàng)目的開篇要介紹下git的使用呢?俗話說:“工欲善其事,必先利其器”,git工具就是項(xiàng)目開發(fā)的必備利器,尤其是在多人協(xié)作開發(fā)環(huán)境中。

使用git工具可實(shí)現(xiàn)分布式的版本控制,可在服務(wù)端和本地創(chuàng)建一個(gè)版本庫。

?腦圖是本文的“脊椎”,了解個(gè)大概后,再通讀本文,再加上實(shí)際的操作,效果會更好,那我們就開始吧!

image

1 Git工具安裝

Windows版本安裝:

  • 安裝包下載地址:https://gitforwindows.org/
    使用安裝包完成安裝后,git工具會自動安裝git bash 工具(打開開始菜單,找到"Git"->"Git Bash"),會彈出git命令窗口,在命令窗口下可以進(jìn)行g(shù)it操作,同時(shí)鼠標(biāo)右鍵也可以快速打開git bash

其它平臺版本安裝:

2 用戶配置

配置個(gè)人用戶名稱和電子郵件

$ git config --global user.name "RobbieHan"
$ git confit --global user.email robbie_han@outlook.com

查看配置信息

$ git config --list

3 Git工作流程

image
  • 克隆Git資源作為工作目錄(在項(xiàng)目中會介紹到使用git從github克隆項(xiàng)目文件來進(jìn)行開發(fā)工作)
  • 在克隆的資源上添加或修改文件
  • 提交前查看修改
  • 提交項(xiàng)目修改文件
  • 撤回修改

4 Git創(chuàng)建倉庫

使用當(dāng)前目錄作為倉庫

$ git init 

使用指定目錄作為Git倉庫

$ git init myproject

初始化后,會在我們創(chuàng)建的倉庫目錄下生成一個(gè).get的隱藏目錄,所有Git相關(guān)數(shù)據(jù)和資源都在這個(gè)目錄中。

5 Git基本操作

git clone:

使用git clone拷貝一個(gè)Git倉庫到本地,例如從github上克隆git-demo項(xiàng)目

$ git clone https://github.com/RobbieHan/git-demo.git
# ssh方式 git clone git@github.com:RobbieHan/git-demo.git

克隆完成后,會在當(dāng)前目錄下生成一個(gè)git-demo的項(xiàng)目目錄,接下來我們就可以查看git-demo項(xiàng)目文件,修改代碼了.

git add :

使用git add 命令將文件添加到緩存,我們在git-demo項(xiàng)目中創(chuàng)建一個(gè)test.py文件,然后使用git add 將文件添加到緩存

$ touch test.py
$ ls
README.md  test.py
$ git status -s
?? test.py

其中g(shù)it status命令是用于查看項(xiàng)目當(dāng)前狀態(tài),接下來使用git add命令來添加文件:

$ git add test.py
$ git status -s
A  test.py

這時(shí)候在使用git status命令可以看到 test.py文件已經(jīng)成功添加到緩存。

git diff:

查看尚未緩存的改動(已經(jīng)修改變更尚未執(zhí)行g(shù)it add的文件):git diff

$ echo "# This is test.py" > test.py
$ git diff
diff --git a/test.py b/test.py
index e69de29..0c029d2 100644
--- a/test.py
+++ b/test.py
@@ -0,0 +1 @@

從上面輸出結(jié)果可以看出git diff 會一行行顯示還未提交到緩存的具體變動內(nèi)容。

查看已緩存成功的改變:git diff --cached

$ git add .
$ git diff --cached
diff --git a/test.py b/test.py
new file mode 100644
index 0000000..0c029d2
--- /dev/null
+++ b/test.py
@@ -0,0 +1 @@
+# This is test.py

上面使用了 git add . 是提交所有項(xiàng)目文件到緩存,執(zhí)行g(shù)it diff --cached
可以看到已經(jīng)緩存成功的改變,包括新建 test.py文件 ,將內(nèi)容寫入 test.py

git commit:

使用git commit 將存入緩存的快照添加到倉庫中

$ git commit -m '這是一條描述信息:將緩存快照添加到倉庫'
The file will have its original line endings in your working directory.
 1 file changed, 1 insertion(+)
 create mode 100644 test.py
 $ git status
 nothing to commit, working directory clean

將緩存中的快照提交到倉庫后,再來執(zhí)行g(shù)it status 可以看到已經(jīng)沒有需要提交的改動信息了。

git checkout -- file:

使用git checkout -- file 用來撤銷修改,將文件恢復(fù)到上一個(gè)版本,比如將一些無用或錯(cuò)誤的數(shù)據(jù)寫到項(xiàng)目文件了,這時(shí)可以使用git checkout來撤銷修改

$ echo "這是一條錯(cuò)誤的數(shù)據(jù)" > test.py
cat test.py
$ cat test.py
這是一條錯(cuò)誤的數(shù)據(jù)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   test.py

no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout -- test.py
$ cat test.py
# This is test.py

可以看到使用 git checkout -- file 命令已經(jīng)將 test.py恢復(fù)到之前版本

上面的操作是我們用來恢復(fù)工作區(qū)的錯(cuò)誤操作,如果已經(jīng)將工作區(qū)的錯(cuò)誤操作通過 git add 添加到了緩存區(qū)怎么辦呢?可以使用 git reset HEAD file 來撤銷緩存區(qū)的修改。

6、git分支管理

使用git分支可以讓你從開發(fā)主線上分離出來,然后在不影響主線的同時(shí)進(jìn)行開發(fā)工作。

創(chuàng)建分支:

$ git checkout -b dev # -b 表示創(chuàng)建并切換到該分支
Switched to a new branch 'dev'

查看分支:

$ git branch
* dev  # 當(dāng)前分支前面會顯示一個(gè) * 號
  master

接下來我們對項(xiàng)目文件的修改都只會在dev分支上生效,例如給test.py文件添加一行內(nèi)容

$ echo "dev test" >> test.py
$ git add test.py
$ git commit -m "branch dev test"
 1 file changed, 1 insertion(+), 1 deletion(-)

以上的修改操作不會影響到master分支的文件,切換到master分支查看test.py

$ git checkout master
Switched to branch 'master'
$ cat test.py
# This is test.py

當(dāng)然,我們在dev 分支完成的開發(fā)工作可以合并到master分支:

$ git merge dev
Updating 459d678..a4a069b
Fast-forward
 test.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

合并分之后master分支的項(xiàng)目內(nèi)容就和dev一樣了。

分支管理的命令小結(jié):
創(chuàng)建分支:git branch <name>

查看分支:git branch
切換分支: git checkout <name>

合并分支到當(dāng)前分支:git merge <name>

刪除分支:git branch -d <name>

合并沖突:

切換到dev分支,在test.py里面追加一行內(nèi)容:"This is branch dev"

$ echo "This is branch dev" >> test.py
$ git add test.py
$ git commit -m "dev" 

切換到master分支, 在test.py里面追加一行內(nèi)容:"This is branch master"

$ git checkout master
$ echo "This is branch master" >> test.py
$ git commit -am test.py

現(xiàn)在 dev 和master兩個(gè)分支都對文件test.py做了改動,接下來合并分支就是出現(xiàn)沖突:

$ git merge devAuto-merging test.py
CONFLICT (content): Merge conflict in test.py
Automatic merge failed; fix conflicts and then commit the result.

使用git status查看存在沖突的文件:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   test.py

no changes added to commit (use "git add" and/or "git commit -a")

接下來我們需要手動去修改沖突內(nèi)容:

$ vim test.py
dev test
<<<<<<< HEAD
This is branch master
=======
This is branch dev
>>>>>>> dev

可以看到里面test.py里面已經(jīng)標(biāo)記了兩個(gè)分支修改的內(nèi)容,手動修改下沖突的內(nèi)容,保存文件。

$ git add test.py
$ git commit -m "master"

沖突合并完成。

7 Git標(biāo)簽:

在做程序開發(fā)時(shí),經(jīng)常會發(fā)布維護(hù)多個(gè)版本,這時(shí)就可以用到標(biāo)簽(tag),需要用到某個(gè)版本時(shí),根據(jù)標(biāo)簽就可以獲取對應(yīng)的版本。

給當(dāng)前分支打上一個(gè)標(biāo)簽:

$ git tag v1.0
v1.0

如果在代碼提交到git倉庫的時(shí)候忘記打標(biāo)簽了,可以追加標(biāo)簽

$ git log --oneline --decorate --graph
*   97b7808 (HEAD -> master, tag: v1.0) Merge branch 'dev'
|\
| * 3bbe270 (dev) dev
* | 0bad6a6 test.py
|/
* a4a069b branch dev test
* 459d678 這是一條描描述信息‘
* a7968a0 (origin/master, origin/HEAD) git demo
$ git tag v0.1 a7968a0   # 通過日志找到commit id 然后通過 commit id來追加標(biāo)簽

使用指定的tag來生成分支

git checkout -b <branch_name> <tag_name>
git checkout -B <branch_name> <tag_name> # 如果分支已經(jīng)存在使用 -B 可以強(qiáng)制創(chuàng)建分支,覆蓋原來的分支

git標(biāo)簽命令:

查看標(biāo)簽:git tag

查看標(biāo)簽詳細(xì)信息:git show <tagname>

指定標(biāo)簽信息:git tag -a < tagname> -m <tag_desc>

刪除一個(gè)標(biāo)簽:git tag -d <tagname>

8 使用遠(yuǎn)程倉庫

在git bash命令窗口生成密鑰文件

$ ssh-keygen -t rsa -C "youremail@example.com"

上面郵箱換成github注冊郵箱,然后一直回車,系統(tǒng)會在用戶目錄下生成.ssh文件夾,打開id_rsa.pub,復(fù)制里面的key。

vim ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCx984lhTT0nlW3QWTZBiO4WT3BtdOq7OGfgbWlT2NhcW0Uqj7UkMexG4dseUxz4L2TMDjTJIhRdMX+n5Qq1qQwsoQoA3AXg1TxEEZZQ9JJNcanQG58X09235XsIYwAGZbnoixjNAMbV1aa+oLafKvL3InQav+P0Xj38tWVuuJqjtt+QQCiEx8W828N6etR/dcoDw4Isa1k9Hntn4qoY+GqRnkcyBY4aIXMcrakghFcDVH5XlPBndXXRLm06VGtIgpqX82+2gXo0Pp4+p0LMTRnDVxE1fjJy2FwnQf4LkNgeDr7o+DMbTEpPgSKogI9kFpwnbCZjjab robbie_han@hotmail.com

登陸github網(wǎng)站進(jìn)入-settings選擇 SSH and GPG keys ,然后選擇 New SSH key, 填寫 title, 在key選項(xiàng)里面填入剛剛復(fù)制的key, 保存添加。

本地通過git bash 測試密鑰鏈接是否成功

$ ssh -T git@github.com
Hi RobbieHan! You've successfully authenticated, but GitHub does not provide shell access.

在github上新建一個(gè)倉庫,倉庫名為:gitdemo, 將本地倉庫提交到github

$ git remote add origin git@github.com:RobbieHan/git-demo.git
$ git push -u origin master

上傳分支到github

$ git push -u origin dev

上傳標(biāo)簽到github

$ git push origin v1.0  # 上傳一個(gè)tag
$ git push origin --tags # 上傳全部tag

我們從github上克隆了一個(gè)項(xiàng)目,如果這個(gè)項(xiàng)目更新了,可以使用兩條命令來獲取更新

$ git fetch origin master # 從遠(yuǎn)程倉庫下載新的分支數(shù)據(jù)
$ git merge # 合并到本地當(dāng)前分支

克隆某個(gè)分支到本地:git clone -b <branch name> [remote repository address]

查看當(dāng)前遠(yuǎn)程庫:git remote -v

刪除遠(yuǎn)程倉庫: git remote rm [別名]


安裝部署交流:83792608(QQ群)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,939評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內(nèi)容