git是目前最流行的版本管理系統。
參考:
<a href="http://www.ruanyifeng.com/blog/2014/06/git_remote.html">http://www.ruanyifeng.com/blog/2014/06/git_remote.html</a>
<a href="http://www.bootcss.com/p/git-guide/">http://www.bootcss.com/p/git-guide/</a>
手冊:
<a href="http://www.yiibai.com/git/">http://www.yiibai.com/git/</a>
官網:
git有很多優勢,其中之一就是遠端操作非常簡便。基本上經常用的幾個指令就能滿足大多數場景的需求。同時可以和現有的ide內建開發環境結合使用。
首先看一下git是如何工作的:
這裡面涉及到了workspace、本地倉庫和遠端倉庫。workspace就是本地的個工作空間,比如說我們的一個工程。本地的工程檔案要和遠端倉庫互動,需要先在本地建立一個倉庫,這時候就需要将本地的項目,送出到本地倉庫中,然後再将本地倉庫送出到遠端倉庫。
當然還有一些東西沒法在這個過程裡展現的,上圖中隻是托管的過程,實際上還有代碼庫的版本更疊的過程。這裡用分支來管理不同的版本。建立一個git peoject預設的分支是master。
針對我們平時的一些場景來看下上面的過程:
我在本地建立了一個workspace,簡單來講就是建立了一個本地的工程項目,我如何讓遠端的代碼庫來管理我的代碼呢?
建立工程項目,并建立本地倉庫repository,并添加一個檔案
建立好了本地的倉庫,如何去管理本地倉庫?
- 增加檔案: git add
- 删除檔案: git rm
- 重命名檔案: git mv
- 更新檔案:修改檔案内容
- 檢出: git checkout branch,用于本地分支的操作
- 檢視狀态: git status -s, git log
檔案的增删改操作并沒有送出到本地,需要commit之後才送出到本地倉庫, 常用的送出指令git commit -a -m ” “或者git commit -m ” “, -m 送出的備注資訊, -a 會自動送出已有檔案的更新操作。 使用者也可以在本地建立新的分支git branch new_branch, 目前的branch可以git branch指令檢視,本地的branch切換git checkout new_branch。git checkout -b new_branch指令用于建立一個新的分支并切換到新分支。有了分支如何合并?在master分支下運作:git merge origin/new_branch,将會把新的分支合并到master分支。
本地的修改如何送出到遠端倉庫?
遠端代碼送出,需要先将本地代碼添加到本地倉庫,才能送出。
- 增加 git remote add <主機名> <網址>
- 送出 git push <遠端主機名> <本地分支名>:<遠端分支名>
本地對檔案的update、mv、rm會影響倉庫中的代碼嗎?
本地沒有代碼,從遠端下載下傳的代碼,又該如何管理?
- git clone
- git fetch <遠端主機名> <分支名> //擷取更新 origin
- git pull <遠端主機名> <遠端分支名>:<本地分支名> //擷取更新并與本地合并
遠端主機的管理 git remote add <主機名> <網址> git remote show <主機名> git remote rm <主機名> git remote rename <原主機名> <新主機名>
具體的安裝可以參照相關的官方教程實作,當然還有一些簡便方法,可以下載下傳all-in-one安裝包,一次性安裝。安裝包可以去bitnami官網下載下傳。
基本的使用規範和github的使用是相同的,如果使用者需要使用ssh來送出代碼,需要添加公鑰密碼。當然也可以直接使用http位址送出,不需要配置。
ssh的設定可以通過,profile settings中完成,具體的過程gitlab上有幫助說明,點選進去就可以看到。這裡不再贅述。
指令使用手冊說明
要在對應的項目下設定不同人員的ssh key用于認證,同時在項目組成員中添加對應的成員。
象,高層的api是一個面向普通使用者級别功能友好的前端。
這裡主要是介紹高層的api,因為高層的api,暫時已經滿足我們的需求。以下根據git的工作流程,分點列出api的介紹:
高層api操作git的方法的核心對象就是根據git類提供的方法。
(1)用filerepositorybuilder來建立新的倉庫,或者打開已有的倉庫。
(2)或者直接用git提供的靜态初始化的方法:
git.init()
(此方法,源代碼也是利用了repositorybuilder的方法)
利用核心類git的靜态方法clonereposity,設定本地和遠端的uri來擷取倉庫。
這邊,jgit主要通過ssh和http(s)的方式與遠端倉庫進行互動。通過這兩種方式,
必然是需要添加驗證資訊的。以下一一介紹:
clonecommand clonecommand = git.clonereposity();
clonecommand通過setcredentialsprovider()的方法,通過指派一個
usernamepasswordcredentialsprovider對象,來提供使用者名和密碼登陸。
(不建議使用http的方式傳送,但是也可行)
其實通過公鑰通路的連結,有兩種表示方式:
ssh://[email protected]/repo.git
git@../user/.git
而ssh利用公鑰的通路方式的認證資訊,通過jsch庫提供。而在jgit中提供了
jschconfigsessionfactory的抽象類:
以下這是在command中注冊認證資訊:
使用的是上述jschconfigsessionfactory重寫的configure方法中,設定
password,具體就不詳述了。
對應git對象的add()方法,通過addfilepattern()比對檔案,添加到倉庫中,使用call
方法最終實作指令執行。
往本地倉庫的送出,設定資訊message。
git.commit().setmessage(string message).call();
将遠端的倉庫拉取下來,需要設定認證的資訊。
将修改送出到遠端倉庫,需要設定認證資訊。