使用 Git 命令去管理項目的版本控制(二)
參考上一篇完成本篇博客,本篇為作者原創,僅供學習參考。
本篇博文在上一篇的基礎上這里記錄了我的一個小模擬練習。本篇作為自己的學習筆記,也意在方便其他人的學習使用,達到分享目的。下面主要是操作截圖 參考 cankao 參考
首先這里我要重點說明一下:git 與 svn 的區別,git 是分布式的管理服務器,一個很好的應用就是 gitHub 網站。是 Linux 內核開源的作者使用27天時間編寫成功的,是不是非常牛逼( 參考 )。svn 是一個集中式的服務器。集中式的服務器對網絡的要求比較大,如果沒有網絡,他就不能很好地為我們服務,這也是我為什么要分享一下git的使用的原因之一。但是較大的公司一般還是出于保密不會使用第三方的托管工具,他們一般都會有自己的內網和代碼管理工具。git能夠在沒有網絡的情況下完成對版本的回復,提交修改源碼,僅僅在同步服務器的時候需要網絡(將本地的服務器倉庫副本上傳到公司的服務器原本中)。
首先建立以下文件夾,下面默認已經打開顯示隱藏文件(這個請參照上一篇中的命令)注意,下面出現的中文文件夾,沒有試驗成功,需要修改為英文的名字,這樣就能夠進行了提交版本等等實驗。由于截屏要花費時間,所以下面的博文,從不能實現的地方我進行了修改了英文,前面的重點是一些操作步驟。
將初始化 服務器數據倉庫 為遠程倉庫(就是我們Project要托管的地方),打開終端,輸入命令如下:
經理需要在 項目經理 文件夾中 克隆服務器倉庫副本到本地 ,然后再創建工程框架,創建一份濾過性說明文件 .gitignore ,最后將創建好工程框架的數據倉庫副本推送到服務器倉庫(push),截圖如下:
在終端中找到路徑為 項目經理/數據倉庫 的路徑,然后為該服務器副本倉庫配置用戶名,郵箱,然后添加一個工程到副本內部,注意:濾過文件(.gitignore)與(.git)還有 工程文件 三個在同一級目錄(服務器副本文件夾)中。下面省去了用戶名,郵箱配置,截圖如下:
下面是將上面做好的工作,推送到公司服務器倉庫中:
程序員張三,去從公司服務器倉庫 得到整個項目:
下面假設李四 和 王五 都做了上面的步驟,這樣 三四五都開始編碼了,第一天開工了:
張三工作,張三打開從服務器上克隆下來的工程文件,開始了自己的編碼,編碼一天了,開始提交自己的工作到公司服務器。
點擊 Xcode菜單欄上的source control -> commit 進行提交
commit 的時候 順便再勾選一下左下角的 push to remote
經理晚上要看看張三這個人,這一天的任務量是否完成
點擊 Xcode菜單欄上的source control -> pull 進行更新
在pull的時候遇到錯誤如下:
可以這樣的解決:
點擊 Xcode菜單欄上的source control -> Discard All Changes 進行將以前的更新撤銷,然后再從服務器拉取更新就OK了
做到這里居然張三提交到服務器的內容,對張三、經理、其他人都不能pull下來。這里我仔細檢查了半天,都沒有問題啊,原因是我采用了中文的名字,在生成路徑的時候,非常的容易出錯,導致系統不能認出來了,所以以后還是要寫成字母為好。下面我又新建的文件,開始繼續上面的操作。
注意,user.anme user.email 是必須寫的,不然在提交代碼的時候會給出警告,不能提交,這里如果忘了,可以在終端輸入設置用戶名和用戶郵箱的命令。
這一次我快速的創建了字母的格式的文件夾,就好了,解決了上面的問題。那么下面我就要基于我字母格式文件夾來模擬操作了。
好了下面的模擬很簡單,文件名字也很簡單(經理-jl,張三-zs ,王五-ww ,公司遠程服務器-sever)
下面模擬王五開始干活,在工程中操作:
接下來,王五提交任務到服務器
由于缺少用戶名與郵箱,上傳到服務器的時候,如下:
解決辦法:
現在就可以了,提交之后。jl打開然后pull 就可以看到ww(王五)做了什么工作了。
經理要的操作:打開工程-Source Control ->pull....
次日,張三來的很早,第一件事就是從服務器上down一份最新的工程代碼
下載之前:
下載之后:(pull)
致此,已經模擬了項目經理上傳框架,員工下載框架,員工上傳自己的任務、經理下載查看任務完成情況。
以后我還陸續更新,分支的使用,感覺寫博客是一件費時的事情,但是呢也有收獲,自己能夠再一次的學習理解,分享,還能在遺忘的時候快速回顧。
假設這時候公司來了一個新的員工叫 wm(王麻子)
公司第一次給新人的是一個公司服務器倉庫的副本
所以就要求項目經理創建一下新人服務器的遠程倉庫
a、創建一個遠程倉庫文件夾 并初始化 git init —bare
b、有項目經理操作:操作流程:Xcode -> source control -> 主倉庫-master -> configure 主倉庫 -> Remotes -> 左下角+ 添加一個新人服務器地址 -> 填完用戶名和地址之后 done
c、向新人服務器里面添加項目
項目經理->Xcode->source control->push->新人服務器地址里面
我們建立一個文件夾,模擬一下經理創建的 新人服務器的遠程倉庫:
輸入命令設置用戶名,用戶郵箱,不然后期沒有辦法操作。
添加一個新人折騰用的服務器。
注意下面經理要push 到 我們的新人搗蛋折騰服務器哦
經理 push新人使用服務器工程 成功
新人從項目經理那邊拿到新人服務器的地址,開始clone,并開發。
新人已經從折騰服務器中clone 了工程
新人這時候自己玩吧
公司經理分配任務:(讓王五(ww)來修復 1.0版本的 bug ,讓張三(zs)來開發項目1.1版本,新人(xr)負責瞎搗蛋,經理(jl)負責檢查上面員工的進度)這時候經理(jl)在將系統打好版本標記 v1.0 v1.1 如下:
經理找來王五開始修改v1.0的bug
王五應該拿到貼有1.0標簽的這個版本的項目
(經理修改或者切換自己的版本為1.0版本,然后push 1.0版本到服務器,王五從服務器 pull下來,并創建分支然后切換到創建的分支,注意看 “常見命令”)
git checkout -b xiugaiBug
這時候,王五pull之后,bug修改好了,要提交到主分支并與之合并,可以 Xcode ->Souce Control ->xiugaiBug->Merge into Branch.... 然后一步一步確定Ok
最后 張三從服務器 pull 一份,可以看到里面修改好了bug 。
創建分支: $ git branch mybranch 切換分支: $ git checkout mybranch 創建并切換分支: $ git checkout -b mybranch 更新master主線上的東西到該分支上:$git rebase master 切換到master分支:$git checkout master 更新mybranch分支上的東西到master上:$git rebase mybranch 提交:git commit -a 對最近一次commit的進行修改:git commit -a –amend commit之后,如果想撤銷最近一次提交(即退回到上一次版本)并本地保留代碼:git reset HEAD^ 合并分支:(merge from) $ git checkout master $ git merge mybranch (merge from mybranch) 刪除分支: $ git branch -d mybranch 強制刪除分支: $ git branch -D mybranch 列出所有分支: $ git branch 查看各個分支最后一次提交: $ git branch -v 查看哪些分支合并入當前分支: $ git branch –merged 查看哪些分支未合并入當前分支: $ git branch –no-merged 更新遠程庫到本地: $ git fetch origin 推送分支: $ git push origin mybranch 取遠程分支合并到本地: $ git merge origin/mybranch 取遠程分支并分化一個新分支: $ git checkout -b mybranch origin/mybranch 刪除遠程分支: $ git push origin :mybranch rebase: $ git checkout mybranch $ git rebase master (rebase from master) 舉例: $ git checkout server $ git rebase –onto master server client $ git checkout master $ git merge client (fostforward) $ git rebase master server (checkout sever) $ git merge server $ git branch -d client $ git branch -d server View Code 常見命令
(Over 版本控制已經就這些,僅僅是很淺的學習到這里,以后還要繼續學習git的知識,這篇博文話費時間最久,決定以后要減少寫博客的時間)