Git

git的官方網站:http://git-scm.comhtml

Git介紹

Git是一個開源的分佈式版本控制軟件,用以有效、高速的處理很小到大的項目版本管理。Git 最初是由Linus Torvalds設計開發的,用於管理Linux內核開發。Git 是根據GNU通用公共許可證版本2的條款分發的自由/免費軟件,安裝參見:http://git-scm.com/
Git就是一個用於幫助用戶實現版本控制的軟件。

GitHub是一個基於Git的遠程文件託管平臺。
Git自己徹底能夠作到版本控制,但其全部內容以及版本記錄都只能保存在本機,若是想要將文件內容以及版本記錄同時保存在遠程,則須要集合github來使用。

 首先將咱們寫好的項目創建好,而且下載好git後,使用git管理。python

基礎命令

一、初始化,讓git把這個文件管理起來git

git init

會出現.git文件,若是沒有,將設置一下隱藏文件就能夠了,正常狀況下會是這種狀況github

Initialized empty Git repository in D:/python/gitdemo/.git/

二、查看當前文件夾的狀態web

git status

會顯示:面試

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .idea/
        app01/
        gitdemo/
        manage.py
        templates/

nothing added to commit but untracked files present (use "git add" to track)

這個時候文件都尚未被管理,因此都是紅色的緩存

三、咱們先隨便對一個文件進行管理,例如:manage.py安全

git  add   manage.py(文件名)     # 就是對當前文件版本控制

而後在查看一下狀態:app

git  status
123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   manage.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .idea/
        app01/
        gitdemo/
        templates/

此刻,manage.py是已經被管理的文件,顏色從紅色變成了綠色。分佈式

四、對當前文件下的全部文件以及子目錄進行版本控制

git  add  .

在查看,就是全部文件都被管理了:

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$  git add . warning: LF will be replaced by CRLF in .idea/gitdemo.iml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in .idea/misc.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in .idea/modules.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in .idea/workspace.xml.
The file will have its original line endings in your working directory.

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file: .idea/gitdemo.iml
        new file:   .idea/misc.xml
        new file:   .idea/modules.xml
        new file:   .idea/workspace.xml
        new file:   app01/__init__.py
        new file:   app01/admin.py
        new file:   app01/apps.py
        new file:   app01/migrations/__init__.py
        new file:   app01/models.py
        new file:   app01/tests.py
        new file:   app01/views.py
        new file:   gitdemo/__init__.py
        new file:   gitdemo/__pycache__/__init__.cpython-35.pyc
        new file:   gitdemo/__pycache__/settings.cpython-35.pyc
        new file:   gitdemo/settings.py
        new file:   gitdemo/urls.py
        new file:   gitdemo/wsgi.py
        new file:   manage.py
        new file:   templates/index.html

五、建立提交記錄(版本)

git  commit -m "詳細描述版本信息"
123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git commit -m '建立第一個版 本'
[master (root-commit) 72d22fe] 建立第一個版本本
 19 files changed, 504 insertions(+)
 create mode 100644 .idea/gitdemo.iml
 create mode 100644 .idea/misc.xml
 create mode 100644 .idea/modules.xml
 create mode 100644 .idea/workspace.xml
 create mode 100644 app01/__init__.py
 create mode 100644 app01/admin.py
 create mode 100644 app01/apps.py
 create mode 100644 app01/migrations/__init__.py
 create mode 100644 app01/models.py
 create mode 100644 app01/tests.py
 create mode 100644 app01/views.py
 create mode 100644 gitdemo/__init__.py
 create mode 100644 gitdemo/__pycache__/__init__.cpython-35.pyc
 create mode 100644 gitdemo/__pycache__/settings.cpython-35.pyc
 create mode 100644 gitdemo/settings.py
 create mode 100644 gitdemo/urls.py
 create mode 100644 gitdemo/wsgi.py
 create mode 100644 manage.py
 create mode 100644 templates/index.html

若是在這一步報錯了,就是沒有寫名字,和郵箱。按照所說的步驟來就好了。

這個時候咱們再查看:

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status
On branch master
nothing to commit, working tree clean

已經爲空,變成透明的了文件,實際上仍是存在的。

六、查看信息,提交的記錄

git  reflog
123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git reflog
72d22fe (HEAD -> master) HEAD@{0}: reset: moving to 72d22fe3836c39ae2a1e0e85e106           a41cc9b24898
c5cf29d HEAD@{1}: commit: 添加論文檢查3功能
72d22fe (HEAD -> master) HEAD@{2}: commit (initial): 建立第一個版本本

七、回滾

git  reset --hard  (版本號)

 八、暫存,用於在開發過程當中臨時須要修復bug或臨時新功能的到來

stash用於將工做區發生變化的全部文件獲取臨時存儲在「某個地方」,將工做區還原當前版本未操做前的狀態;stash還能夠將臨時存儲在「某個地方」的文件再次拿回到工做區。

git stash 做用:幫助咱們暫時存儲已經開發的一些功能的代碼,繼續作其餘事情。作完以後再回來繼續開發。
git stash pop
特別的:執行 git stash pop 命令時,可能會遇到衝突,由於在緊急修復bug的代碼和經過stash存儲在「某個地方」的代碼會有重合部分,因此執行 git stash pop 時候就會出現衝突,有衝突解決衝突便可。
stash相關經常使用命令:

git stash             將當前工做區全部修改過的內容存儲到「某個地方」,將工做區還原到當前版本未修改過的狀態
git stash list        查看「某個地方」存儲的全部記錄
git stash clear     清空「某個地方」
git stash pop       將第一個記錄從「某個地方」從新拿到工做區(可能有衝突)
git stash apply     編號, 將指定編號記錄從「某個地方」從新拿到工做區(可能有衝突) 
git stash drop      編號,刪除指定編號的記錄

九、與stash做用相同的是branch

分支學習:branch稱爲分支,默認僅有一個名爲master的分支。通常開發新功能流程爲:開發新功能時會在分支dev上進行,開發完畢後再合併到master分支。
git  branch dev                # 建立新分支,即:拷貝一份當前所在分支代碼到新分支
git checkout dev               # 切換到dev分支

分支功能完成後,再合併。合併以前要回到master,在合併

git checkout master             # 切換回master分支 
git merge dev                   # 將dev分支內容合併到master分支

代碼:

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch dev # 建立分支 拷貝一份當前所在分支代碼到新支 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch # 查看一下分支
  dev
* master

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git checkout dev # 切換到dev分支
Switched to branch 'dev'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git add . # 將修改文件添加到版本庫的暫存區 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git commit -m "論文修改3.1"    # 將暫存區的內容提交到當前所在分支,即:dev分支
[dev beb0313] 論文修改3.1
 1 file changed, 1 insertion(+)

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git status # 查看狀態
On branch dev 
nothing to commit, working tree clean

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git checkout master  # 切換到master
Switched to branch 'master'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status                
On branch master
nothing to commit, working tree clean

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch picc 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git checkout picc
Switched to branch 'picc'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
$ git add . 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
$ git commit -m "修改論文3.1.1"
[picc 597a7e2] 修改論文3.1.1
 1 file changed, 1 insertion(+), 1 deletion(-)

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
$ git checkout master
Switched to branch 'master'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git merge picc # 合併
Updating c5cf29d..597a7e2
Fast-forward
 templates/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git log
commit 597a7e216b13825f35a53932c7811fbbf7734187 (HEAD -> master, picc)
Author: unknown <1079264692@qq.com>
Date:   Wed Mar 13 11:27:14 2019 +0800

    修改論文3.1.1

commit c5cf29d6df4a152d82badeb414c89b2eb6711b28
Author: unknown <1079264692@qq.com>
Date:   Mon Mar 11 13:44:59 2019 +0800

    添加論文檢查3功能

commit 72d22fe3836c39ae2a1e0e85e106a41cc9b24898
Author: unknown <1079264692@qq.com>
Date:   Mon Mar 11 13:35:18 2019 +0800

    建立第一個版本本

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git atatus
git: 'atatus' is not a git command. See 'git --help'.

The most similar command is
        status

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git status
On branch master
nothing to commit, working tree clean

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch -d picc # 刪除這個分支
Deleted branch picc (was 597a7e2).

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch
  dev
* master

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git checkout dev
Switched to branch 'dev'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git status
On branch dev
nothing to commit, working tree clean

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git status
On branch dev
nothing to commit, working tree clean

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git status
On branch dev
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:   templates/index.html

no changes added to commit (use "git add" and/or "git commit -a")

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git add .

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git commit -m "論文暫時修改完"
[dev 1ac93af] 論文暫時修改完
 1 file changed, 1 insertion(+)

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git checkout master
Switched to branch 'master'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git merge dev
Auto-merging templates/index.html
CONFLICT (content): Merge conflict in templates/index.html
Automatic merge failed; fix conflicts and then commit the result.
branch相關經常使用命令:

git branch 分支名稱             建立分支
git checkout 分支名稱          切換分支
git branch -m 分支名稱        建立並切換到指定分支
git branch                          查看全部分支
git branch -d 分支名稱         刪除分支
git merge 分支名稱              將指定分支合併到當前分支

面試題:

若是代碼出現bug,如何解決?

建立一個bug分支,而後進行bug處理,處理完畢後合併到master分支,而後刪除bug分支。最後回到dev分支繼續開發。

最後,咱們都寫完功能後,若是是在家裏邊寫完的,到公司之後若是沒帶電腦怎麼辦?這時候就有了GitHub託管平臺。

GitHub介紹

GitHub,一個基於Git實現的代碼託管的平臺,能夠將內容以及版本記錄在遠程也保存一份,這樣就不用U盤咯(相似於雲盤)。
PS: 相似GitHub的產品還有許多,如:GitLab、Bitbucket、碼雲等。

基於GitHub實現代碼託管,須要一下步驟:

  • 註冊GitHub
  • 建立倉庫,建立完倉庫後會有一個URL代指該倉庫
  • git能夠是用該URL進行向遠程推送版本信息或獲取版本信息

在家裏,將開發完的功能提交到GitHub

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git remote add origin https://github.com/lllmy/gitdemo.git                 # 爲地址起一個別名origin 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git push origin master # 將本地master分支內容以及版本信息推送到GitHub 
Enumerating objects: 42, done.
Counting objects: 100% (42/42), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (35/35), done.
Writing objects: 100% (42/42), 9.41 KiB | 566.00 KiB/s, done.
Total 42 (delta 10), reused 0 (delta 0)
remote: Resolving deltas: 100% (10/10), done.
To https://github.com/lllmy/gitdemo.git
 * [new branch]      master -> master

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git branch
  dev
* master

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
$ git checkout dev
Switched to branch 'dev'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git push origin dev # 將本地dev分支內容以及版本信息推送到GitHub
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/lllmy/gitdemo/pull/new/dev
remote:
To https://github.com/lllmy/gitdemo.git
 * [new branch]      dev -> dev

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git pull origin dev
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/lllmy/gitdemo
 * branch            dev        -> FETCH_HEAD
   1ac93af..54efe99  dev        -> origin/dev
Updating 1ac93af..54efe99
Fast-forward
 templates/index.html | 1 +
 1 file changed, 1 insertion(+)

在公司,咱們在GitHub上把在家裏寫的功能代碼給拉下來

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa
$ git clone https://github.com/lllmy/gitdemo.git # 將項目從GitHub中獲取 
Cloning into 'gitdemo'... remote: Enumera ting objects: 42, done. remote: Counting objects: 100% (42/42), done. remote: Compressing objects: 100% (25/25), done. remote: Total 42 (delta 10), reused 42 (delta 10), pack-reused 0 Unpacking objects: 100% (42/42), done. 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa $ ls gitdemo/

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa $ cd gitdemo 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master) $ git branch  # 默認獲取到得只有master分支 * master 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master) $ git branch dev 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master) $ git checkout dev Switched to branch 'dev'

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git pull origin dev From https://github.com/lllmy/gitdemo * branch            dev        -> FETCH_HEAD Already up to date. 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git status On branch dev nothing to commit, working tree clean 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git status On branch dev 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: templates/index.html no changes added to commit (use "git add" and/or "git commit -a") 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git add . 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git commit -m "會員功能1/3" [dev 54efe99] 會員功能1/3
 1 file changed, 1 insertion(+) 123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev) $ git push origin dev Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 368 bytes | 184.00 KiB/s, done. Total 4 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/lllmy/gitdemo.git 1ac93af..54efe99 dev -> dev
123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ ls
2.py  app01/  gitdemo/  manage.py*  templates/

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git fetch origin dev # 從GitHub倉庫獲取dev分支最新內容到版本庫的分支
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 3), reused 6 (delta 3), pack-reused 0
Unpacking objects: 100% (6/6), done.
From https://github.com/lllmy/gitdemo
 * branch            dev        -> FETCH_HEAD
   d4cfd11..7f07a9e  dev        -> origin/dev

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ git merge origin/dev # 將版本庫的分支內容合併到工做區
Updating d4cfd11..7f07a9e
Fast-forward
 1.py | 0
 3.py | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 1.py
 create mode 100644 3.py

123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
$ ls
1.py  2.py  3.py  app01/  gitdemo/  manage.py*  templates/
久而久之,將Git和GitHub結合使用作到避免電腦損壞形成數據丟失以及多地開發的問題,
上文執行過程當中執行 【git pull origin 分支】命令等同於【git fetch origin 分支】+ 【git merge origin/分支】,
而且在執行過程當中可能會出現衝突,緣由是因爲本地代碼和獲取的最新代碼有重合部分,那麼就須要本身手動解決衝忽然後再繼續開發。

面試題:

git  rebase的做用?

我在公司寫代碼忘記提交了,在家繼續開發功能,在拉取代碼後提交,用git fetch和gitmerge提交的時候會有一個分叉記錄,咱們吧git merge換成git rebase會保持提交記錄的整潔。

 

 以斜槓「/」開頭表示目錄;   以星號「*」通配多個字符;   以問號「?」通配單個字符   以方括號「[]」包含單個字符的匹配列表;   以歎號「!」表示不忽略(跟蹤)匹配到的文件或目錄; .gitignore
在git中若是想忽略掉某個文件,不讓這個文件提交到版本庫中,可使用修改 .gitignore 文件的方法。這個文件每一行保存了一個匹配的規則例如:

# 此爲註釋 – 將被 Git 忽略

            *.a       # 忽略全部 .a 結尾的文件
            !lib.a    # 但 lib.a 除外
            /TODO     # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
            build/    # 忽略 build/ 目錄下的全部文件

            doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

    這樣設置了之後 全部的 .pyc 文件都不會添加到版本庫中去。

    另外 git 提供了一個全局的 .gitignore,你能夠在你的用戶目錄下建立 ~/.gitignoreglobal 文件,以一樣的規則來劃定哪些文件是不須要版本控制的。

須要執行 git config --global core.excludesfile ~/.gitignoreglobal來使得它生效。

其餘的一些過濾條件

    * ?:表明任意的一個字符
    * *:表明任意數目的字符
    * {!ab}:必須不是此類型
    * {ab,bb,cx}:表明ab,bb,cx中任一類型便可
    * [abc]:表明a,b,c中任一字符便可

    * [ ^abc]:表明必須不是a,b,c中任一字符

    因爲git不會加入空目錄,因此下面作法會致使tmp不會存在 tmp/*             //忽略tmp文件夾全部文件

    改下方法,在tmp下也加一個.gitignore,內容爲
                        *
                        !.gitignore
    還有一種狀況,就是已經commit了,再加入gitignore是無效的,因此須要刪除下緩存
                        git rm -r --cached ignore_file

 

注意: .gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的。

    正確的作法是在每一個clone下來的倉庫中手動設置不要檢查特定文件的更改狀況。
    git update-index --assume-unchanged PATH    在PATH處輸入要忽略的文件。

    另外 git 還提供了另外一種 exclude 的方式來作一樣的事情,不一樣的是 .gitignore 這個文件自己會提交到版本庫中去。用來保存的是公共的須要排除的文件。
而 .git
/info/exclude 這裏設置的則是你本身本地須要排除的文件。 他不會影響到其餘人。也不會提交到版本庫中去。 .gitignore 還有個有意思的小功能, 一個空的 .gitignore 文件 能夠看成是一個 placeholder 。當你須要爲項目建立一個空的 log 目錄時, 這就變的頗有用。
你能夠建立一個 log 目錄 在裏面放置一個空的 .gitignore 文件。這樣當你 clone 這個 repo 的時候 git 會自動的建立好一個空的 log 目錄了。

 

git tag -a v1.0 -m '版本介紹'        本地建立Tag
    git show v1.0                       查看
    git tags -n                         查看本地Tag
    git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配
    git tag -d v1.0                     刪除Tag
    git push origin :refs/tags/v0.2     更新遠程tag
    git checkout v.10                   切換tag
    git fetch origin tag V1.2

    git push origin  --tags
    git pull origin  --tags
    
    git clone -b v0.1

版本相關

 

先說一下相同點,兩者都是基於web的Git倉庫,在很大程度上GitLab是仿照GitHub來作的,
它們都提供了分享開源項目的平臺,爲開發團隊提供了存儲、分享、發佈和合做開發項目的中心化雲存儲的場所。 GitHub做爲開源代碼庫及版本控制系統,擁有超過900萬的開發者用戶,目前仍然是最火的開源項目託管系統。GitHub同時提供公共倉庫和私有倉庫,但若是要使用私有倉庫,是須要付費的。 而GitLab解決了這個問題,你能夠在上面建立私人的免費倉庫。 GitLab讓開發團隊對他們的代碼倉庫擁有更多的控制,相比於GitHub,它有很多的特點: 容許免費設置倉庫權限;容許用戶選擇分享一個project的部分代碼;容許用戶設置project的獲取權限,進一步的提高安全性;
能夠設置獲取到團隊總體的改進進度;經過innersourcing讓不在權限範圍內的人訪問不到該資源。 從代碼私有性方面來看,有時公司並不但願員工獲取到所有的代碼,這個時候GitLab無疑是更好的選擇。但對於開源項目而言,GitHub依然是代碼託管的首選。

 鏈接:http://www.javashuo.com/article/p-uxaseany-bb.html

相關文章
相關標籤/搜索