小編在學習可視化的時候,接觸到git,所以這里寫一下關於GitHub的有關知識,寫這個的目的還是鞏固自己的學習,一方面可以提高自己,另一方面回頭看一下,有什么更深層次的東西還可以再記錄。
首先說一下版本控制軟件,它可以讓我們能夠拍攝處於可行狀態的項目的快照,修改項目(如實現新功能)后,如果項目不能正常運行,可以恢復到前一個可行狀態。
通過使用版本控制,我們可以無憂無慮的改進項目,不用擔心項目因為我們犯錯而遭到破壞,對於大型項目來說,這顯得尤為重要,但是對於小項目來說,哪怕只包含一個文件的程序,也大有裨益。
GibHub的名字源於Git,Git是一個分布式版本控制系統,讓程序員團隊能夠協作開發項目,Git幫助大家管理為項目所做的工作,避免一個人所做的修改影響其他人所做的修改。你在項目中實現一個新功能的時候,Git將跟蹤你對每個文件所做的修改。確定代碼可行后,你將提交所做的修改,而Git將記錄項目最新的狀態,如果你犯了錯,想撤銷所做的修改,可輕松的返回以前的任何可行狀態。GitHub上的項目都存儲在倉庫中,后者包含與項目相關聯的一切:代碼,項目參與者的信息,問題和bug報告等
下面講一下安裝Git(小編是windows系統,就只演示windows系統的安裝)
第一步:下載(https://git-for-windows.github.io/),下載好如下圖
第二步:安裝過程,此處省略,要想安裝可以點擊下面鏈接
【Git的安裝步驟博文http://www.cnblogs.com/wj-1314/p/7993819.html】
第三步:配置
Git跟蹤誰修改了項目,哪怕參與項目開發的只有一個人。為此,Git需要知道你的用戶名和電子郵件。你必須提供用戶名,但可以使用虛構的電子郵件地址:
git config --global user.name "Username" git config --global user.email "Username@example.com"
因為Git是分布式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。你也許會擔心,如果有人故意冒充別人怎么辦?這個不必擔心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。
注意git config
命令的--global
參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
第四步:創建項目
我們來創建一個要進行版本控制的項目(又稱版本庫)。在你的系統創建一個文件夾,並將其命名為learngit。
我創建learngit的程序如下:
mkdir learngit #創建文件learngit
cd learngit #進入learngit文件里面
pwd #顯示learngit的存在目錄
我創建了一個hello.world.py程序,如下:
print("hello world")
第五步:忽略文件
忽略擴展名為.pyc的文件,它是根據.py文件自動生成啊,我們無需讓Git去跟蹤。這些文件存儲在目錄__pycache__中,未來讓git忽略它,我們創建一個名為.gitignore的特殊文件,(這個文件是以局點打頭,沒有擴展名,並且讓在其中添加下面一行內容)
_pycache_/
第六步:初始化倉庫
我們創建了一個文件,並通過git init
命令把這個目錄變成Git可以管理的倉庫:
$ git init Initialized empty Git repository in C:/Users/learngit/.git/
瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),細心的讀者可以發現當前目錄下多了一個.git
的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。要是刪除這個東西,則丟棄項目的所有記錄。
如果你沒有看到.git
目錄,那是因為這個目錄默認是隱藏的,用ls -ah
命令就可以看見。
也不一定必須在空目錄下創建Git倉庫,選擇一個已經有東西的目錄也是可以的。不過,不建議你使用自己正在開發的公司項目來學習Git,否則造成的一切后果概不負責。
第七步:檢查狀態
在執行其他操作之前,先來看一下狀態:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello_world.py
nothing added to commit but untracked files present (use "git add" to track)
在Git中,分支是項目的一個版本,從這里的輸出我們可以知道,我們位於分支的,master
我們每次查看項目的狀態時候,輸出的都是我們位於分支master上,接下里的輸出表明,我們將進行初始項目的日叫,提交是項目在特定時間的快照。
Git指出了項目中未被跟蹤的文件,因為我們還沒有告訴他要跟蹤那些文件,接下里我們被告知沒有任何東西添加到當前提交里面,但我們可能需要將為跟蹤的文件加入倉庫
第八步:將文件加入到倉庫
$ git add . 。。。@▒▒▒▒▒ĵ▒▒▒ MINGW64 ~/learngit (master) $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: hello_world.py
命令 git add . 將項目中未被跟蹤的文件都加入到倉庫中,它不提交這些文件,而只是讓git開始關注他們。現在我們檢查這個項目的狀態,發現Git找到了需要提交的文件的一些修改,標簽 new file 表示這些文件是新加入的。
第九步:執行提交
$ git commit -m "Started project" [master (root-commit) 5d6ceca] Started project 1 file changed, 1 insertion(+) create mode 100644 hello_world.py
我們在執行 git commit -m "Started project" 的時候以拍攝項目的快照。標志-m 讓Git接下里的消息(“Started project")記錄到項目中的歷史記錄中,輸出表明我們在分支master 上,而且有一個文件被修改了
簡單解釋一下git commit
命令,-m
后面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄。
第十步:查看提交歷史
$ git log commit 5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Author: username <xxxxxxxxxx.example.com> Date: Sat Dec 9 20:16:17 2017 +0800 Started project
我們每次提交的時候,Git都會生成一個包含40字符的獨一無二的引用ID,它記錄提交是誰執行的,提交的時間以及提交的指定消息,並非在任何情況下你都需要所有的這些信息,因此Git提供一個選項,讓我們能夠打印提交歷史條目的更簡單的版本。
$ git log --pretty=oneline
5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Started project
標志 --pretty=oneline 指定顯示一項最重要的信息,提交的引用ID以及為提交記錄的消息。
第十一步:第二次提交
為了顯示版本控制的強大,我們需要對項目進行修改,並提交所做的修改。為此,我們在文件hello.world.py中再添加一行代碼。
print("hello world") print("hello git")
如果我們查看項目的狀態,將發現Git注意到這個文件的變化
$ git status On branch master 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: hello_world.py no changes added to commit (use "git add" and/or "git commit -a")
這個之處了我們當前所在的分支為master,其中做出修改的文件是hello_world.py,而且指出所做的修改還沒有提交。
接下來我們提交所做操作,並在查看操作。
這一步,我們執行了提交,並且在執行命令git commit 的時候指定了標志-am.標志-a 讓Git 將倉庫中所有修改了的文件都加入當前提交中,(如果我們兩次提交之間加入了新文件,我們執行get add . 操作,將新文件加入到倉庫中)標志-m讓Git咱提交歷史中記錄一條消息。
$ git commit -am "Extrended greeting." [master b4ee15d] Extrended greeting. 1 file changed, 2 insertions(+), 1 deletion(-)
$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting. 5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project
我們在查看項目的狀態的時候,發現工作目錄也是干凈的,最后我們發現提交歷史中包含兩個提交。
第十二步:撤銷修改
下面來看看如何放棄所做的修改,恢復到一個可行狀態,為此,我們首先在hello_world.py中添加一行代碼
hello_world.py
print("hello world") print("hello git") print("the world is bad")
保存並運行這個文件
我們查看狀態,發現Git注意到所做的修改
$ git status On branch master 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: hello_world.py no changes added to commit (use "git add" and/or "git commit -a")
Git注意到我們修改了hello_world.py,我么可以提交所做的修改,但是我們不提交所做的修改,而要恢復到最后一個提交,為此我們不對hello_world.py執行任何操作————不刪除剛添加的代碼行,也不使用文本編輯器的撤銷功能,而是在終端會話中執行如下命令:
$ git checkout .
命令 git checkout . 能夠讓我們恢復到以前的任何提交。命令git checkout . 放棄最后一次提交所做的所有操作,將項目恢復到最后一次提交的狀態。
$ git status
On branch master
nothing to commit, working tree clean
就這個項目而言,我們恢復到前一個狀態微不足道,但是如果我們開發的是大型項目,其中數十個文件都被修改了,那么恢復到前一個狀態,將撤銷來自最后一次提交的對這個文件所做的所有修改,這個功能很有用,比如:實現新功能,我們可以根據需要做任意數量的修改,如果這些修改都不行,可以撤銷他們,而不會對項目有任何傷害,你無需記住做了那些修改,因而不必手工撤銷所做的修改,Git會替我們完成所有的工作。
第十三步:檢查以前的提交
我們可以檢查提交歷史中的任何一次提交,而不僅僅是最后一次,為此我們可以在命令git check末尾指定該提交的引用ID的前6個字符(而不是局點)。通過檢查出以前的提交,我們可以對其進行審核么然后返回到最后一次提交,或者放棄最近所做的工作,並選擇以前的提交。
$ git log --pretty=oneline b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting. 5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project
$ git checkout 5d6cec Note: checking out '5d6cec'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 5d6ceca... Started project
檢查出以前的提交,我們將離開分支master,並進入Git所說的Git所說的分離頭指針(detached HEAD)狀態,HEAD表示項目的當前狀態,之所以說我們處於分離狀態是因為我們離開了一個命名分支(這里是master)
要回到分支master,可以檢查出它:
$ git checkout master Previous HEAD position was 5d6ceca... Started project Switched to branch 'master'
這就會讓你回到分支master 。除非i使用Git的高級功能,否則在提交以前的項目后,最好不要對項目做任何修改,然而,如果參與項目開發的人只有我們自己,而我自己又想放棄所有提交,並恢復到以前的狀態,也可以將項目重置到以前的狀態,為此,可在處於分支master上的任何情況下,執行如下命令。
$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting. 5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project
$ git reset --hard 5d6cec HEAD is now at 5d6ceca Started project
$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline
5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Started project
首先,我們查看了狀態,確認我們在分支master上,查看歷史提交時,我們看見了兩個提交。
然后,我們執行了命令 git reset --hard ,並在其指定了要永久性的恢復到的提交的引用ID的前6個字符。
接下來,我們在次查看狀態,大仙,我們在分支master上,並且沒有需要任何修改,
最后,我們再次查看提交的歷史狀態時候,我們發現我們處於重新開始的提交中。
第十四步:刪除倉庫
有時候,倉庫的歷史紀錄被我們搞亂了,而我們又不知道如何恢復,這時候我們首先應該考慮百度一下,看看自己的問題出在那里,如果無法恢復,而且參與項目的人只有自己,可以繼續使用這些文件,但需要將這些項目的歷史紀錄刪除——刪除.git 這不會影響任何文件的當前狀態,而只會刪除文件的所有提交,因此我們將無法檢查出項目的其他任何狀態。
為此,可以打開一個文件瀏覽器,並將目錄.git 刪除,也可以通過命令完成這個任務。但是這樣做過我們需要創建一個新的倉庫,以重新對這些修改進行跟蹤。
下面演示了如何在終端會話中完成這個過程。
$ git status
On branch master
nothing to commit, working tree clean
$ rm -rf .git
rm -rf .git 表示刪除目錄.git,刪除后我們將繼續查看狀態。
$ git status
fatal: Not a git repository (or any of the parent directories): .git
這個意思是被告知我們,這不是一個倉庫,(git用來跟蹤倉庫的信息都存儲愛文件夾.git中,因此刪除該文件夾也將會刪除整個倉庫)
接下來,我們用命令 git init 來創建一個新的倉庫,並查看狀態
$ git init Initialized empty Git repository in C:/Users//learngit/.git/
$ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) hello_world.py nothing added to commit but untracked files present (use "git add" to track)
從狀態中我們發現,又回到了初始狀態,等待第一次提交,我們下面將所有的文件都添加到倉庫中,並執行第一次提交,最后檢查狀態,如下:
$ git add .
$ git commit -m "Starting over" [master (root-commit) 81350ab] Starting over 1 file changed, 1 insertion(+) create mode 100644 hello_world.py
$ git status
On branch master
nothing to commit, working tree clean
從檢查狀態我們發現,我們在分支master上,並且沒有任何未提交的修改。
這就是版本控制的基本操作,希望能多多練習,這樣我們才能學會版本控制。
要想好好了解GitHub的使用,請參考小編使用GitHub的點點滴滴的博客:https://www.cnblogs.com/wj-1314/p/9901763.html
-
推薦一個版本控制工具
-
CODING:研發管理系統:https://coding.net/ ,以 Git 代碼托管與發布為核心,涵蓋代碼提交、代碼審查、Bug 追蹤等開發場景,通過任務、文件、Wiki 等工具,獲取需求管理、任務追蹤、知識庫管理等一系列寫作功能。基於 Git 的版本控制保障了公司代碼資產安全,實現自動構建,減少人工干預,提升業務系統質量。
-
系統基本架構:
-
企業級項目工作一體化: