今天就結合`GitHub`,經過`Git`命令,來了解如何實現開源代碼庫以及版本控制
html
GitHub是一個面向開源及私有軟件項目的託管平臺,由於只支持Git 做爲惟一的版本庫格式進行託管因此咱們須要下載一個Git客戶端軟件,用來執行各類指令git
Git下載地址https://git-scm.com/github
下載完畢後,配置`path`環境變量,`E:\develop\git\Git\bin`(我本機的在E盤下)
app
在`doc`命令行窗口輸入`git`命令,若是出現以下的信息,說明安裝成功,
工具
點擊鼠標右鍵,菜單欄會出現 `Git GUI` 和 `Git Bash`GUI: Graphical User Interface(用戶圖形界面)Bash:是Windows下的命令行工具
gitlab
版本存儲倉庫:url
接下來我用`git`命令,來一步步實現GitHub發佈項目,版本控制的功能
spa
一、首先在電腦上建立一個空文件夾,我爲這個空文件夾起名叫demo,而後進入該文件夾首先在GIT終端執行,`git init` 指令,會在demo文件夾生成`.git`文件夾.net
二、在demo文件夾內建立一個a.txt文件,而後經過`git status` 查看,該指令做用是 列出修改過的(綠色標識)、新建立的(紅色標識)、已經暫存但未提交的文件(白色標識)
命令行
三、而後經過`git add 某文件(git add . 添加所有)`添加剛纔咱們新建的a.txt文件
四、而後經過`git commit -m "備註信息"`,提交本次內容
以上4步的操做效果截圖以下:
五、咱們利用上述指令,在往demo文件夾中添加一個b.txt文件,而後經過`git log`查看咱們的操做記錄,而後能夠查詢到咱們添加a.txt和b.txt的log日誌,而後經過`git reset --hard b96f962d0f835e3114b6f51bf7c9bfe6125626e3`,去回退到咱們的操做節點,此時我回退到第一次添加文件節點,也就是demo文件夾只有一個a.txt文件,如下是git端的效果截圖
六、此時查看`git log` 結果發現只有一條操做記錄,也就是咱們添加的a.txt的記錄,咱們以前進行的第二步操做呢?也就是添加的b.txt文件節點時,咱們如何回退到最後這個節點呢?咱們能夠利用`git reflog`
七、此刻demo文件夾中的2個文件內容,a.txt文本以下:
b.txt文本內容以下:
咱們繼續爲b.txt添加以下記錄信息
此刻b.txt文件內容以下:
上述意思就是在更新`b.txt`文件內容,添加操做記錄若是用到開發場景,咱們在**需求1**,然而因爲工做須要,**需求1**須要暫且擱置,咱們須要作**需求2**,**需求1**代碼須要砍掉,等咱們作完**需求2**,咱們繼續須要獲取咱們以前**需求1**的代碼,咱們能夠利用`git stash`命令,如下是該命令的含義
此次會有衝突,咱們須要解決衝突,便可
八、咱們能夠經過`git branch` 查看咱們的項目全部分支,默認只有一個`master`主分支,咱們能夠經過`git branch dev`(dev是咱們起的分支名)新建一個分支,名字是dev開發分支,而後經過`git checkout dev`切換到咱們新建的dev分支,咱們也能夠經過`git checkout -b 分支名`一併實現建立、切換分支的功能
九、咱們切換到`dev`分支,經過`touch 文件名`建立一個文件,而後add、commit ,意思就是在dev分支上作一些修改,並保存在dev分支上,而後在切回master分支,咱們要作的就是將dev上更新的內容,也在master上作一樣的修改,咱們能夠用`git merge` 分支名,將dev上的更新內容,合併到master上另外刪除分支使用`git branch -d 分支名`
十、利用`github`建立項目,會出現以下指令,須要在git終端輸入建立生成項目,要添加一個新的遠程倉庫,能夠指定一個簡單的名字,以便未來引用,運行 git remote add [shortname] [url]:
經過`git remote add origin 和https://github.com/iyongfei/test.git`
十一、接下來咱們經過`git clone https://github.com/iyongfei/test.git`來`clone`下載咱們的`github`項目,咱們默認拉取的是`master`分支(默認分支能夠在**github**設置其餘分支)
而後根據之前的git指令,進行`git add .` 和 `git commit -m "備註信息"`,
注意注意,因爲項目開發都是協同開發,咱們在接下來在提交代碼以前,須要`git pull origin 分支`,拉取對應分支代碼,而後若是有衝突解決衝突,而後在`git push origin 分支名`
ps:我以下的截圖在提交代碼時,爲了簡化操做,沒有`git pull`
十二、咱們還能夠往`github`項目上添加新分支,咱們經過`git branch 分支`建立分支,經過`git checkout 分支`切換分支,(或者經過`git checkout -b 分支`,建立並切換分支),而後在添加、提交(我這裏沒有添加任何信息),最後`git push origin dev` 往github項目上添加新分支
1三、咱們還能夠拉取其餘分支的內容到本分支,好比我在`master`上添加內容,而後我在`dev`分支上去拉取`master`上的代碼,而後在提交到對應的github分支`dev`上(我本地依然沒有添加額外的內容)
1四、衝突如何產生?咱們如何解決衝突?當本身拉取了`dev`的代碼,同事也拉取了`dev`的代碼,同事先於我提交代碼,而後本身也在本地修改了代碼,若是修改了同一個文件,會出現衝突狀況,再次拉取`dev`代碼會失敗,並且提交失敗
解決方式一:先在本身本地`dev`,經過`git stash`暫存修改,而後`git pull 分支`代碼,再而後`git stash pop` 合併代,解決衝突(刪掉咱們不須要的代碼),而後在提交代碼
解決方式二:不利用`git stash`,利用`compare`對比軟件,將有衝突的文件,剪切出來,而後拉取`dev`分支代碼,就把github的`dev`分支最新代碼,同步下來,而後在跟本身的剪切出來的代碼段,進行對比,將本身的代碼更新到同步下來的代碼,而後在提交到github對應的分枝上
########################如下是項目中的截圖########################
一、首先進入項目的主分支
二、Fork一份工程,當作本身的項目管理分支
三、在電腦上建立一個文件夾,先Clone一份本身工程的項目分支(xxx屏蔽公司信息)
git clone git@xxxx.gitlab.com:xxxxxx/SELand_Vertu
四、進入項目的二級目錄進入git客戶端,確認要pull分支
git branch看看當前的分支
git checkout -b develop 切換到develop分支,由於我要pull拉去develop分支上的項目
五、而後在將本身的項目分支同步項目主分支(咱們項目分支爲develop分支)
git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop
六、每次提交代碼時候,須要先同步項目主分支代碼
git status是哪些文件有所修改
git diff 能夠查詢所修改的代碼
git add -A 增長本身所作的修改
git commit -a 提交全部修改的代碼
git push origin develop 提交代碼
七、最後在new merge request,提交給相應的負責人,進行merge代碼
錯誤解決::::
若是某個同事提交代碼,老大沒有及時merge代碼,本身也提交該文件的代碼,那麼老大merge代碼會有衝突
會差生以下的錯誤提示:
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
能夠這樣修改
一、git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop先同步一下會出現以上的錯誤
二、pull會使用git merge致使衝突,須要將衝突的文件resolve掉 git add -u,
三、在項目中看看哪些代碼是對方改的,哪些代碼是本身修改的,在合併成一份最新的代碼
四、git commit以後才能成功