當我們開發項目的時候,項目會越來越大,就有可能需要其它同事進行參與,甚至進行開源,這時就需要找一個地方把代碼存放起來,好供其它人下載並開發。這個地方,最好放到服務器上,因為只要能上網,就可以獲取到, 現在有好多的服務器可以供我們使用,比如github. 沒有使用過github,也沒有關系,它是一個存放代碼的網站,要使用它就要先進行注冊。
1, 首先要到GitHub 官網注冊一個帳號,非常簡單,填寫用戶名,郵箱,密碼即可。注冊完成后,登錄,就可以看到如下的界面。
2,注冊完成后,就可以使用github了。我們要把源代碼放到上面,就要在網站上找一個地方,對於github來說,它就是創建一個倉庫。點擊上圖中的加號按鈕,再點擊 new Repository, 就可以看到創建倉庫的頁面。
3, 在 Repository name輸入 項目名稱,如git-learning. 在Description 中輸入項目描述,如 為了學習git 而創建的項目。點擊最下面的 create repository 綠色按鈕,項目創建成功。
4, 創建成功后,就可以在這個倉庫中存放代碼了。但是我們怎么才能把代碼存放到這個倉庫中呢?比如我們要把在上面兩個章節創建的math 項目放到這個倉庫中 ,要怎么處理? 首先要將本地math倉庫和這個遠程倉庫git-learing 進行連接, 使用git remote add 遠程倉庫的名稱 遠程倉庫的地址,remote 就是遠程的意思,名稱就是給它起個命字,以后好使用,一般都會命名為origin. 地址是什么呢?就是上圖中 的 https://github.com/samling1989/githublearning.git, 這就是遠程倉庫的地址。在math 項目中右鍵選中git bash, 調出git 命令窗口。
這時再調用git remote 命令,就會出現遠程倉庫的名稱,配置成功了。
還可以加上參數 -v, 是--verbose 縮寫,詳細的意思, 它會列出遠程倉庫的地址。
5, 本地倉庫和遠程倉庫建立連接,就可以上傳代碼了,使用的命令是git push, 將本地的代碼推送到遠程倉庫, 基本的命令是git push 遠程倉庫名 <本地分支名>:<遠程分支名>
本地倉庫是在master分支上,我們也想在遠程倉庫上建立master, 兩個分支一一對應,使用比較方便。
上傳成功了,刷新一下github, 可以看到上傳的代碼了. 其實,如果本地倉庫分支名和遠程倉庫的分支名相同的話,遠程倉庫的分支名可以省略,git push origin master 也可以實現相同的功能, 這時github 會自己創建同名的分支。
當創建github倉庫的時候,它提示我們最好創建一個README.md文件,LICENCE, 和.gitignore 文件,這也是一個完整的github項目所必須的。現在本地創建README.MD和.gitignore 文件,LICENCE 以后再說。README.md是一個markdown文件,對於整個項目的說明。.gitignore 文件則是git 提交可以忽略的文件,比如node_modules 文件。
然后,git add . 和git commit 添加到本地倉庫,然后調用git status,
可以發現,Your branch is ahead of 'origin/master' by 1 commit.(use "git push" to publish your local commits), 本地倉庫比遠程倉庫提前一個版本,要用git push
也上傳成功了。這時你會發現,上傳一次就要輸入遠程倉庫名和分支名,有點麻煩,可不可以簡單點,輸入git push. 現在試一下,
git 要求建立 upstream branch, 它也提供了相應的命令,直接輸入這個命令執行就可以了, 最終結果就是建立了當前分支與遠程分支追蹤關系, 這時再調用git push, 就沒有問題。
6, 現在代碼共享了,也就意味着可以進行多人開發了。首先其它人要從github上復制一份代碼到他自己的電腦上。使用的命令是git clone. git clone 命令接受兩個參數, 一個是source, 我們clone的代碼倉庫的地址(github倉庫地址), 一個是要clone 到的項目目錄,git clone source destination_dir, 當然最后一個參數可以省略,如果省略,git 會自動創建一個目錄,目錄名稱就是source 的目錄(項目)名稱。找一個放項目的地方,然后打開git bash 命令窗口,執行git clone 命令,
當前文件夾多了一個文件夾,another-git-learing, 克隆項目成功了。這里要注意的是,當我們進行clone的時候,我們只會把遠程倉庫中的當前分支拷貝到本地了,git branch, 它只顯示一個分支,即使遠程倉庫有很多分支,這時要使用 git branch --all,顯示該項目所有的分支,但是前面加上remote/origin, 表示遠程分支。我們也可以使用 git checkout 遠程分支下面的分支名,它就是可以在本地創建一個相同的分支。git checkout -b another_fix_branch remotes/origin/another_fix_branch
當然你也可以clone 一個分支,git clone -b 遠程倉庫的地址 分支名。 執行完git clone 以后,你會發現,可以使用git push 提交代碼,不用配置remote, 其實git clone 命令已經給你做了。git clone 是一系列命令的集合。 當執行git clone 時, 首先,它創建了一個新的工作目錄,就是一個文件夾,名字默認是服務器上的倉庫名稱。然后把這個目錄初始化為git 倉庫。添加一個遠程分支 origin, 最后,把所有的內容復制到本地文件夾中, 本地分支和遠程倉庫直接建立連接,我們可以push。在克隆完某個項目后,至少可以看到一個名為 origin 的遠程庫,Git 默認使用這個名字來標識你所克隆的原始倉庫。
7, 多人合作沖突解決
當進行多人合作的時候,難免會產生沖突,因為大家都在一個倉庫上工作。當別人提交了代碼,而你又沒有更新代碼時,就會無法提交代碼。我們直接在github上創建一個license, 模擬一下,他人提交代碼。
找到這個create new file 點擊, 進入到如下頁面
輸入license, 右側有 一個choose a license template, 點擊,進入了協議選擇頁面,左側選擇MIT, 然后右側有一個review and submit 綠色按鈕,點擊,然后跳回到了上圖,
在最下面有一個 commt a new line, 選擇create a new file for master 單選按鈕,然后點擊最下面的綠色按鈕,ok, 創建成功,我們的項目中多了一個license.
這時在git-learning 文件中,git bash 命令中輸入git push,
拒絕提交代碼,因為遠程倉庫的的代碼,我們本地倉庫沒有。當我們使用git push 提交代碼時,git 首先要檢查本地倉庫分支和要推送到的遠程倉庫的分支的版本,如果兩個版本不同步或不一致,它就會報錯,禁止提交,通常是本地倉庫的版本小於遠程倉庫的版本。這時就要從遠程倉庫拉取代碼,來保持同步。使用git pull 命令。git pull的完整命令是
git pull 遠程倉庫名 遠程分支:本地分支
其實 一般,本地分支和遠程分支同名,可能直接省略本地分支,git pull origin master, 由於git push的時候,分支建立了追蹤關系, 直接使用git pull 也可以
我們本地多了license 文件,這時再git push 就沒有問題了。
還有一種沖突,拉取代碼沖突。其他人更改了代碼上傳了,而我們沒有及時更新,也改了代碼,而這兩份更改都是改的同一個文件的同一個地方。我們還是在github上修改文件,模擬其它人的提交,如更改main.js 加一個console.log 語句。然后我們在本地的main.js 也增加一個console.log語句, 然后提交到本地倉庫,這時執行git pull, 發現沖突了。
其實在這種情況下,不適合用git pull, 要用git pull的分解命令,git fetch 和git merge. git pull 是兩個命令git fetch 和 git merge 的集合.
首先,git fetch 從遠端倉庫拉取代碼,放到本地代碼庫中。這時我們可以用git log --decorator --oneline 或 gitk,可以看到 它有origin/master origin/HEAD 表示從遠端倉庫拉取代碼成功。
把遠端的代碼拉取到本地以后,可以進行對比,遠端代碼和本地代碼進行對比,還是git diff 命令,不過參數,本地分支 遠端分支 git diff master origin/master
可以看到兩個分支在main.js 中的不同, 為以后的分支合並打下基礎。
再執行git merge 操作,git merge origin/master: 合並遠程分支到本地分支。它的參數是遠程分支名, 可以看到如下結果。
把沖突解決一下,然后git add 和git commit 提交到本地倉庫,最后git push 推送到遠端倉庫。
8, 當真正代碼開發的時候,其它人向你的倉庫的提交代碼的時候,肯定是要授權的, 要不然,他提交的時候,就會報錯。像同事之間的開發項目,授權的方式,可以是添加協作者。 在github網站,進入我們的項目
點擊第二行最右側的Settings, 頁面左側有一個options面板,
第一個就是collaborator(合作者),點擊,要求輸入密碼,輸入密碼后,看到如下頁面
我們可以紅色方框內的輸入框中輸入合作者的用戶名,然后點擊右側的 add collaborator 按鈕,添加成功之后,合作者就和我們創作者擁有的同樣的權限。
9, 刪除項目
我們這個項目,只是演示用的,沒有什么大太的作用,學習完成后,可能就想把它刪除掉了。還是點擊上面說的settings.面板最下方有一個Danger Zone 區域,Delete this repository 按鈕(如下圖)
點擊可以看到一個彈窗,詢問你是不是確定要刪除? 在彈窗的輸入框中輸入你的項目名 這時它下面的按鈕,就會變紅色,表示可以單擊進行刪除了,單擊進行刪除。輸入的內容一定要和你的項目名稱一致,否則刪除按鈕是禁用狀態,無法刪除項目。