首頁 > 軟體

Git詳解及 GitHub與GitLab使用

2020-06-16 16:59:25

1.1 關於版本控制

1.1.1 本地版本控制

本地版本控制系統 許多人習慣用複製整個專案目錄的方式來儲存不同的版本,或許還會改名加上備份時間以示區別。這麼做唯一的 好處就是簡單,但是特別容易犯錯。有時候會混淆所在的工作目錄,一不小心會寫錯檔案或者覆蓋意想外的檔案。

1.1.2 集中化的版本控制系統

如何讓在不同系統上的開發者協同工作?於是,集中化的版本控制系統(Centralized Version  Control Systems,簡稱 CVCS)應運而生。這類系統,諸如 CVSSubversion 以及Perforce 等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過用戶端連到這台伺服器,取出最新的檔案或者提交更新。多年以來,這已成為版本控制系統的標準做法。

1.1.3 分散式版本控制系統

        在這類系統中,像GitMercurialBazaar 以及 Darcs 等,用戶端並不只提取最新版本的檔案快照,而是把程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個映象出來的本地倉庫恢復。因為每一次的克隆操作,實際上都是一次對程式碼倉庫的完整備份。

回到頂部

1.2 Git簡介

 

    官網:https://git-scm.com

        git是一個分散式版本控制軟體,最初由林納斯·托瓦茲(Linus Torvalds)創作,於2005年以GPL發布。最初目的是為更好地管理Linux核心開發而設計。

Git 官方中文手冊 https://git-scm.com/book/zh/v2

1.2.1 Git歷史

2002年開始,林納斯·托瓦茲決定使用BitKeeper作為Linux核心主要的版本控制系統用以維護程式碼。因為BitKeeper為專有軟體,這個決定在社群中長期遭受質疑。在Linux社群中,特別是理查德·斯托曼與自由軟體基金會的成員,主張應該使用開放原始碼的軟體來作為Linux核心的版本控制系統。林納斯·托瓦茲曾考慮過採用現成軟體作為版本控制系統(例如Monotone),但這些軟體都存在一些問題,特別是效能不佳。現成的方案,如CVS的架構,受到林納斯·托瓦茲的批評。

2005年,安德魯·垂鳩寫了一個簡單程式,可以連線BitKeeper的儲存庫,BitKeeper著作權擁有者拉里·麥沃伊認為安德魯·垂鳩對BitKeeper內部使用的協定進行逆向工程,決定收回無償使用BitKeeper的授權。Linux核心開發團隊與BitMover公司進行蹉商,但無法解決他們之間的歧見。林納斯·托瓦茲決定自行開發版本控制系統替代BitKeeper,以十天的時間,編寫出第一個git版本

1.3 安裝git

1.3.1 環境說明

[root@gitlab ~]# rpm -qa CentOS-release
centos-release-7-4.1708.el7.centos.x86_64
[root@gitlab ~]# uname -a
Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@gitlab ~]# getenforce 
Disabled
[root@gitlab ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

# 本文使用的linux系統均為該系統

# 本文使用的windows系統為 Microsoft Windows [版本 10.0.15063]

1.3.2 Yum安裝Git

# centos 自帶git

[root@gitlab ~]# rpm -qa git
git-1.8.3.1-11.el7.x86_64

 # 安裝方法

yum install git -y

1.3.3 編譯安裝

編譯安裝可以安裝較新版本的git

Git下載地址: https://github.com/git/git/releases

# 安裝依賴關係
yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel
# 編譯安裝
tar -zxf git-2.0.0.tar.gz
cd git-2.0.0
make configure
./configure --prefix=/usr
make  
make install  回到頂部

1.4 初次執行 Git 前的設定

1.4.1 設定git

命令集

git config --global user.name "clsn"  #設定git使用使用者
git config --global user.email "admin@znix.top"  #設定git使用郵箱
git config --global color.ui true  #語法高亮
git config --list # 檢視全域性設定

設定過程

[root@gitlab ~]# git config --global user.name "clsn"  #設定git使用使用者
[root@gitlab ~]# git config --global user.email "admin@znix.top"  #設定git使用郵箱
[root@gitlab ~]# git config --global color.ui true  #語法高亮
[root@gitlab ~]# git config --list # 檢視全域性設定
user.name=clsn
user.email=admin@znix.top
color.ui=true

生成的組態檔

[root@gitlab ~]# cat .gitconfig 
[user]
    name = clsn
    email = admin@znix.top
[color]
    ui = true

1.4.2 獲取幫助

使用Git時需要獲取幫助,有三種方法可以找到Git命令的使用手冊:

git help <verb>
git <verb> --help
man git-<verb>

例如,要想獲得設定命令的手冊,執行

git help config

1.5 獲取 Git 倉庫(初始化倉庫)

# 建立目錄
mkdir git_data
# 進入目錄
cd git_data/
# 初始化
git init
# 檢視工作區狀態
git status

操作過程

[root@gitlab ~]# mkdir git_data
[root@gitlab ~]# cd git_data/
[root@gitlab git_data]# git init
初始化空的 Git 版本庫於 /root/git_data/.git/
[root@gitlab git_data]# git status
# 位於分支 master
#
# 初始提交
#
無檔案要提交(建立/拷貝檔案並使用 "git add" 建立跟蹤)

1.6 Git命令常規操作

常用命令說明

命令

命令說明

add   

新增檔案內容至索引

bisect 

通過二分查詢定位引入 bug 的變更

branch 

列出、建立或刪除分支

checkout

檢出一個分支或路徑到工作區

clone 

克隆一個版本庫到一個新目錄

commit 

記錄變更到版本庫

diff   

顯示提交之間、提交和工作區之間等的差異

fetch 

從另外一個版本庫下載物件和參照

grep   

輸出和模式匹配的行

init   

建立一個空的

Git   

版本庫或重新初始化一個已存在的版本庫

log   

顯示提交紀錄檔

merge 

合併兩個或更多開發歷史

mv     

移動或重新命名一個檔案、目錄或符號連結

pull   

獲取並合併另外的版本庫或一個本地分支

push   

更新遠端參照和相關的物件

rebase 

本地提交轉移至更新後的上游分支中

reset 

重置當前HEAD到指定狀態

rm     

從工作區和索引中刪除檔案

show   

顯示各種型別的物件

status 

顯示工作區狀態

tag

建立、列出、刪除或校驗一個GPG簽名的 tag 物件

常用操作示意圖

檔案的狀態變化周期

1.6.1 建立檔案

[root@gitlab git_data]# touch README
[root@gitlab git_data]# git status
# 位於分支 master
#
# 初始提交
#
# 未跟蹤的檔案:
#   (使用 "git add <file>..." 以包含要提交的內容)
#
#    README
提交為空,但是存在尚未跟蹤的檔案(使用 "git add" 建立跟蹤) 

新增檔案跟蹤

[root@gitlab git_data]# git add ./*
[root@gitlab git_data]# git status
# 位於分支 master
#
# 初始提交
#
# 要提交的變更:
#   (使用 "git rm --cached <file>..." 撤出暫存區)
#
#    新檔案:    README
#

檔案會新增到.git的隱藏目錄

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── objects
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

由工作區提交到本地倉庫

[root@gitlab git_data]# git commit  -m 'first commit'  
[master(根提交) bb963eb] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

檢視git的狀態

[root@gitlab git_data]# git status
# 位於分支 master
無檔案要提交,乾淨的工作區

提交後的git目錄狀態

[root@gitlab git_data]# tree  .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 54
│   │   └── 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
│   ├── bb
│   │   └── 963eb32ad93a72d9ce93e4bb55105087f1227d
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

1.6.2 新增新檔案

git add  * 新增到暫存區域
git commit  提交git倉庫 -m 後面接上註釋資訊,內容關於本次提交的說明,方便自己或他人檢視

修改或刪除原有檔案

常規方法

git add  *
git commit

簡便方法

git commit -a  -m "注釋資訊"

-a 表示直接提交

Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are
not affected.

1.6.3 刪除git內的檔案

命令說明:

沒有新增到暫存區的資料直接rm刪除即可。

已經新增到暫存區資料:

git rm --cached database 

#→將檔案從git暫存區域的追蹤列表移除(並不會刪除當前工作目錄內的資料檔案)

git rm -f database

#→將檔案資料從git暫存區和工作目錄一起刪除

命令實踐:

# 建立新檔案
[root@gitlab git_data]# touch 123
[root@gitlab git_data]# git status
# 位於分支 master
# 未跟蹤的檔案:
#   (使用 "git add <file>..." 以包含要提交的內容)
#
#    123
提交為空,但是存在尚未跟蹤的檔案(使用 "git add" 建立跟蹤)

# 將檔案新增到暫存區域

[root@gitlab git_data]# git add 123
[root@gitlab git_data]# git status
# 位於分支 master
# 要提交的變更:
#   (使用 "git reset HEAD <file>..." 撤出暫存區)
#
#    新檔案:    123

刪除檔案

[root@gitlab git_data]# rm 123 -f
[root@gitlab git_data]# ls
[root@gitlab git_data]# git status
# 位於分支 master
# 要提交的變更:
#   (使用 "git reset HEAD <file>..." 撤出暫存區)
#
#    新檔案:    123
#
# 尚未暫存以備提交的變更:
#   (使用 "git add/rm <file>..." 更新要提交的內容)
#   (使用 "git checkout -- <file>..." 丟棄工作區的改動)
#
#    刪除:      123
# 
 
[root@gitlab git_data]# git reset HEAD  ./* 
[root@gitlab git_data]# git status
# 位於分支 master
無檔案要提交,乾淨的工作區

1.6.4 重新命名暫存區資料

沒有新增到暫存區的資料直接mv/rename改名即可。

已經新增到暫存區資料:

git mv README NOTICE

1.6.5 檢視歷史記錄

git log  #→檢視提交歷史記錄

git log -2  #→檢視最近幾條記錄

git log -p -1  #-p顯示每次提交的內容差異,例如僅檢視最近一次差異

git log --stat -2 #--stat簡要顯示資料增改行數,這樣能夠看到提交中修改過的內容,對檔案新增或移動的行數,並在最後列出所有增減行的概要資訊

git log --pretty=oneline #--pretty根據不同的格式展示提交的歷史資訊

git log --pretty=fuller -2 #→以更詳細的模式輸出提交的歷史記錄

git log --pretty=fomat:"%h %cn"  #→檢視當前所有提交記錄的簡短SHA-1雜湊字串與提交著的姓名。

使用format引數來指定具體的輸出格式

格式

說明

%s

提交說明。

%cd

提交日期。

%an

作者的名字。

%cn

提交者的姓名。

%ce

提交者的電子郵件。

%H

提交物件的完整SHA-1雜湊字串。

%h

提交物件的簡短SHA-1雜湊字串。

%T

樹物件的完整SHA-1雜湊字串。

%t

樹物件的簡短SHA-1雜湊字串。

%P

父物件的完整SHA-1雜湊字串。

%p

父物件的簡短SHA-1雜湊字串。

%ad

作者的修訂時間。

命令實踐

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <admin@znix.top>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit

1.6.6 還原歷史資料

Git服務程式中有一個叫做HEAD的版本指標,當使用者申請還原資料時,其實就是將HEAD指標指向到某個特定的提交版本,但是因為Git是分散式版本控制系統,為了避免歷史記錄衝突,故使用了SHA-1計算出十六進位制的雜湊字串來區分每個提交版本,另外預設的HEAD版本指標會指向到最近的一次提交版本記錄,而上一個提交版本會叫HEAD^,上上一個版本則會叫做HEAD^^,當然一般會用HEAD~5來表示往上數第五個提交版本。

git reset --hard  hash

git reset --hard HEAD^  #→還原歷史提交版本上一次

git reset --hard 3de15d4 #→找到歷史還原點的SHA-1值後,就可以還原(值不寫全,系統

會自動匹配)

測試命令

[root@gitlab git_data]# git log
commit a409fc46f792228a8119705e9cc97c2a013534ab
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 11:44:14 2017 +0800

    test

commit bb963eb32ad93a72d9ce93e4bb55105087f1227d
Author: clsn <13835544305@163.com>
Date:   Wed Nov 29 10:57:02 2017 +0800

    first commit

        還原資料

[root@gitlab git_data]# git reset --hard  bb963
HEAD 現在位於 bb963eb first commit
# 檢視資料
[root@gitlab git_data]# ls
README

1.6.7 還原未來資料

什麼是未來資料?就是你還原到歷史資料了,但是你後悔了,想復原更改,但是git log已經找不到這個版本了。

git reflog #→檢視未來歷史更新點

測試命令

[root@gitlab git_data]# git reflog
bb963eb HEAD@{0}: reset: moving to bb963
a409fc4 HEAD@{1}: reset: moving to a409fc4
bb963eb HEAD@{2}: reset: moving to bb963
a409fc4 HEAD@{3}: commit: test
bb963eb HEAD@{4}: commit (initial): first commit
[root@gitlab git_data]#  

1.6.8 標籤使用

前面回滾使用的是一串字串,又長又難記。

git tag v1.0  #→當前提交內容打一個標籤(方便快速回滾),每次提交都可以打個tag

git tag          #→檢視當前所有的標籤

git show v1.0  #→檢視當前1.0版本的詳細資訊

git tag v1.2 -m "version 1.2 release is test"  #→建立帶有說明的標籤,-a指定標簽名字,-m指定說明文字

git tag -d v1.0  #→我們為同一個提交版本設定了兩次標籤,刪除之前的v1.0

測試命令

[root@gitlab git_data]# git reset --hard 0bdf2e7
HEAD is now at 0bdf2e7 modified README file
[root@gitlab git_data]# git reset --hard V1.0
HEAD is now at a66370a add test dir

[root@gitlab git_data]# git tag  v20171129
[root@gitlab git_data]# git tag 
v20171129

1.6.9 對比資料

            git diff可以對比當前檔案與倉庫已儲存檔案的區別,知道了對README作了什麼修改

後,再把它提交到倉庫就放?多了。

git diff README

1.7 分支結構

在實際的專案開發中,盡量保證master分支穩定,僅用於發布新版本,平時不要隨便直接修改裡面的資料檔案。

那在哪幹活呢?幹活都在dev分支上。每個人從dev分支建立自己個人分支,開發完合併到dev分支,最後dev分支合併到master分支。所以團隊的合作分支看起來會像下圖那樣。

1.7.1 分支切換

    [root@gitlab git_data]# git branch linux
    [root@gitlab git_data]# git branch 
      linux
    * master
    [root@gitlab git_data]# git checkout linux 
    切換到分支 'linux'
    [root@gitlab git_data]# git branch 
    * linux
      master

linux分支進行修改

    [root@gitlab git_data]# cat README 
    [root@gitlab git_data]# echo "2017年11月30日" >> README 
    [root@gitlab git_data]# git add .
    [root@gitlab git_data]# git commit -m "2017年11月30日09點10分"
    [linux 5a6c037] 2017年11月30日09點10分
     1 file changed, 1 insertion(+)
    [root@gitlab git_data]# git status 
    # 位於分支 linux
    無檔案要提交,乾淨的工作區

回到master分支

    [root@gitlab git_data]# git checkout master 
    切換到分支 'master'
    [root@gitlab git_data]# cat README 
    [root@gitlab git_data]# git log  -1
    commit 7015bc7b316cc95e2dfe6c53e06e3900b2edf427
    Author: clsn <admin@znix.top>
    Date:   Wed Nov 29 19:30:57 2017 +0800

        123

合併程式碼

    [root@gitlab git_data]# git merge linux 
    更新 7015bc7..5a6c037
    Fast-forward
     README | 1 +
     1 file changed, 1 insertion(+)
    [root@gitlab git_data]# git status 
    # 位於分支 master
    無檔案要提交,乾淨的工作區
    [root@gitlab git_data]# cat README 
    2017年11月30日

1.7.2 合併???敗解決

模擬衝突,在檔案的同一行做不同修改

master 分支進行修改

[root@gitlab git_data]# cat README 
2017年11月30日
[root@gitlab git_data]# echo  "clsn in master">> README 
[root@gitlab git_data]# git commit -a -m "clsn 2017年11月30日 09點20分 "
[master 7ab71d4] clsn 2017年11月30日 09點20分
 1 file changed, 1 insertion(+)

切換到linux分支

[root@gitlab git_data]# git checkout linux 
切換到分支 'linux'
[root@gitlab git_data]# cat README 
2017年11月30日
[root@gitlab git_data]# echo "clsn in linux" >> README 
[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[linux 20f1a13] 2017年11月30日 03
 1 file changed, 1 insertion(+)

回到master分割區,進行合併,出現衝突

[root@gitlab git_data]# git checkout master 
切換到分支 'master'
[root@gitlab git_data]# git merge linux
自動合併 README
衝突(內容):合併衝突於 README
自動合併失敗,修正衝突然後提交修正的結果。

解決衝突

[root@gitlab git_data]# vim README 
2017年11月30日
clsn in master
clsn in linux

# 手工解決衝突

[root@gitlab git_data]# git commit -a -m "2017年11月30日 03"
[master b6a097f] 2017年11月30日 03

1.7.3 刪除分支

因為之前已經合併了linux分支,所以現在看到它在列表中。 在這個列表中分支名字前沒有 * 號的分支通常可以使用 git branch -d 刪除掉;你已經將它們的工作整合到了另一個分支,所以並不會失去任何東西。

檢視所有包含未合併工作的分支,可以執行 git branch --no-merged

git branch --no-merged
  testing

這裡顯示了其他分支。 因為它包含了還未合併的工作,嘗試使用 git branch -d 命令刪除它時會失敗:

git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'. 

如果真的想要刪除分支併丟掉那些工作,如同幫助資訊裡所指出的,可以使用 -D 選項強制刪除它。

1.8 windwosGit的使用

windows git軟體網站 https://git-for-windows.github.io

    軟體下載地址:https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/Git-2.15.1.2-64-bit.exe

        軟體安裝預設即可。

1.8.1 軟體使用

建立新的倉庫

        定義倉庫的路徑

        新增使用者資訊(在 git bash中)

default@Hzs-Desktop MINGW64 /i/git_data (master)
$ git config  --global user.email "admin@znix.top"

default@Hzs-Desktop MINGW64 /i/git_data (master)
$ git config  --global user.name "clsn"

        git Gui 中新增使用者資訊,新增一次就可

        在頁面中將資料設定好即可使用

        檢視歷史資料

1.9 gitlab的使用

前面我們已經知道Git人人都是中心,那他們怎麼互動資料呢?

使用GitHub或者碼雲等公共程式碼倉庫

使用GitLab私有倉庫

1.9.1 安裝設定gitlab

官方安裝文件   https://about.gitlab.com/installation/

國內軟體映象站 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

安裝

[root@gitlab ~]# yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm

初始化

[root@gitlab ~]# gitlab-ctl reconfigure

狀態

[root@gitlab ~]#  gitlab-ctl status
run: gitaly: (pid 4491) 48s; run: log: (pid 4087) 279s
run: gitlab-monitor: (pid 4539) 44s; run: log: (pid 4251) 207s
run: gitlab-workhorse: (pid 4501) 47s; run: log: (pid 4099) 273s
run: logrotate: (pid 4125) 265s; run: log: (pid 4124) 265s
run: nginx: (pid 4112) 271s; run: log: (pid 4111) 271s
run: node-exporter: (pid 4175) 243s; run: log: (pid 4174) 243s
run: postgres-exporter: (pid 4528) 45s; run: log: (pid 4223) 219s
run: postgresql: (pid 3933) 343s; run: log: (pid 3932) 343s
run: prometheus: (pid 4514) 46s; run: log: (pid 4156) 259s
run: redis: (pid 3876) 355s; run: log: (pid 3875) 355s
run: redis-exporter: (pid 4186) 237s; run: log: (pid 4185) 237s
run: sidekiq: (pid 4078) 281s; run: log: (pid 4077) 281s
run: unicorn: (pid 4047) 287s; run: log: (pid 4046) 287s

檢查埠

[root@gitlab ~]# netstat -lntup|grep 80
tcp        0      0 127.0.0.1:8080      0.0.0.0:*    LISTEN     4073/unicorn master 
tcp        0      0 0.0.0.0:80      0.0.0.0:*         LISTEN      4112/nginx: master  
tcp        0      0 0.0.0.0:8060       0.0.0.0:*      LISTEN      4112/nginx: master  

1.9.2 使用瀏覽器存取,進行web介面操作

第一次存取,建立密碼

        進行登陸,使用者名稱為root,密碼為12345678

建立一個新的專案

        定義專案的名稱

        建立完成後會提示沒有新增ssh金鑰

        在伺服器上建立ssh金鑰 使用ssh-ketgen 命令

[root@gitlab ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:n/V2kCiwwm2UfBsnQLm17eXUCBiBByyPbefmz5oQvfU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|       o++o+     |
|      ..+o+ .    |
|       ==++o.. o |
|     ..o==o=..+..|
|      o.So+.++o  |
|       o oo*.o.. |
|        .o+   E .|
|         ..o . . |
|          ooo    |
+----[SHA256]-----+
 
[root@gitlab .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSVdBypha/ALMmvIiZGXxYGz7FJ5TC+hYWo7QGBJ+J6JVinp9yH851fwxln5TWGBrtEousoVHXTTJfFRy8LV+Ho7OfaksYt+5TPxEjf5XX53Z3ZX70PYH3DQFmgzl0QpWw1PYIjrD7kBeLhUg+R/ZePS+HzPvbRCb6gOlkdx46vX4Olr7YbAO5lzAarhaZcE2Q702kPXGeuZbR7KcwVhtoiueyHwyj94bccMfKq7qSskXGbpWuCwcaKQ6uqGap1rP5Viqqv0xeO7Vq0dIZ/YnPL2vPDUvNa36nHosiZGkn4thpPh63KjXaFIfKOuPemLzvDZY0A+88P8gwmAYiPoxp root@gitlab

        將金鑰新增到web介面的使用者中

gitlab自帶的命令集

Command line instructions
Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
Create a new repository
git clone git@gitlab.example.com:root/clsn.git
cd clsn
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Existing folder
cd existing_folder
git init
git remote add origin git@gitlab.example.com:root/clsn.git
git add .
git commit -m "Initial commit"
git push -u origin master
Existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.example.com:root/clsn.git
git push -u origin --all
git push -u origin --tags

建立行的git倉庫

[root@gitlab ~]# git clone git@gitlab:root/Test1.git
正克隆到 'Test1'...
The authenticity of host 'gitlab (10.0.0.63)' can't be established.
ECDSA key fingerprint is SHA256:yOrzs0W+R//s8VDEN9nko6r6wW+8gwJl3Ut7ac0i5SY.
ECDSA key fingerprint is MD5:21:33:dd:4d:01:00:eb:71:a4:4e:2d:2b:bf:37:48:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab' (ECDSA) to the list of known hosts.
warning: 您似乎克隆了一個空版本庫。

        建立檔案並推到遠端git倉庫

[root@gitlab Test1]# echo "clsn" >> clsn
[root@gitlab Test1]# git push -u origin master
分支 master 設定為跟蹤來自 origin 的遠端分支 master。
Everything up-to-date

        推播完成後能夠在web介面中檢視

# md 語法的使用方法

http://www.zyops.com/markdown-syntax

至此gitlab的使用結束了

1.10 GitHub託管服務

Github顧名思義是一個Git版本庫的託管服務,是目前全球最大的軟體倉庫,擁有上百萬的開發者使用者,也是軟體開發和尋找資源的最佳途徑,Github不僅可以託管各種Git版本倉庫,還擁有了更美觀的Web介面,您的程式碼檔案可以被任何人克隆,使得開發者為開源項貢獻程式碼變得更加容易,當然也可以付費購買私有庫,這樣高價效比的私有庫真的是幫助到了很多團隊和企業。

1.10.1 註冊GitHub

瀏覽器存取github官網 https://github.com/ ,點選Sign up 進行註冊

        填寫個人資訊,進行註冊

選擇倉庫型別,預設免費,點選底下Continue註冊

        描述一下你自己,當然,這一步可以跳過

        使用者建立完成,可以建立新的專案

注意:建立新的專案之前要現驗證郵箱

1.10.2 新增金鑰

github上新增一個新的ssh金鑰

 

獲取主機(linux)上的金鑰

[root@gitlab ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:n/V2kCiwwm2UfBsnQLm17eXUCBiBByyPbefmz5oQvfU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|       o++o+     |
|      ..+o+ .    |
|       ==++o.. o |
|     ..o==o=..+..|
|      o.So+.++o  |
|       o oo*.o.. |
|        .o+   E .|
|         ..o . . |
|          ooo    |
+----[SHA256]-----+
 
[root@gitlab ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmv4aEEEpbUyzv1r6SN0JqOfeyQ7sZZbXxWFv4xflIJeK/rl8cF7UYCzjLEvwJlrkIjKSs5uW1x0zWEcZFiv5tGCiO7DeMR6pKUAn7NzNjKiCcElCXiqHVew84iTbxX4MWKlbFoJYO9/wQ1NlrQfqcSgZwJTLKBMVoMXvTWPPGXf6AwdSp68guFwwGDIV8BiHZiy61bKiWYSVKSDP47Y7VUV/bdwGaxG7tAfalWVpe6xXXRtsj58sENyIWbRI7/9XWqs+eV+CgI74YjOanMvHnHFlfg0tb+MewRb4tFGVmroFBRsvfI3Sl2fez2zHG0qh3f34/0KF1kitlWkgcBJqN root@gitlab

Windwos上獲得金鑰的方法(需要安裝git for windows

default@Hzs-Desktop MINGW64 /i/Desktop
$ ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rs                                                                                                                                  a):
Created directory '/c/Users/default.DESKTOP-U9D5JP4/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_r                                                                                                                                  sa.
Your public key has been saved in /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rsa.p                                                                                                                                  ub.
The key fingerprint is:
SHA256:aqnHq/xNn159jBX4o2L2ZJdtiwu4ietvKRT2fL9igZo default@Hzs-Desktop
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|              .  |
|             . . |
|       o      . .|
|      . S .    o.|
|       + +.o ..++|
|     .= +.o=++oo=|
|   . ooE.+==*.oo.|
|    +++=*== .=o. |
+----[SHA256]-----+

default@Hzs-Desktop MINGW64 /i/Desktop
$

default@Hzs-Desktop MINGW64 /i/Desktop
$ cat /c/Users/default.DESKTOP-U9D5JP4/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC15+1oQBzvgzQP3p0Lb9FsTKFfIIws9WxGBVl2B9d2                                                                                                                                  qT2eKFgXoEDNCF/OrhhXvbMDhORxXHf9RG0Aqj+/vJddbaQpCawHhP6VUG1X885xhY4OohDOkFQiWD1s                                                                                                                                  DCMkX7OHNW5ake6P8AdNwI6eSpKYKYCxRMGkRiBa1KDRtG8CvsG8VN0iTSW0UZ3s4Ps+S31pBYlNjOMv                                                                                                                                  Lp0HRAMVhYimLLi0Wz2mBffPOeNjPX1FfJdr+hO7TIRNdyAEGIhSbckkAnVEIASAhI0Re/19v1RnSkk2                                                                                                                                  VtBvc5rVeGxFMNuEIl9WDMSTcedhEGXyRlW2N9TtXlvF1eNflzUg2BtCaCFZ default@Hzs-Desktop

        金鑰建立完成後進行新增

        金鑰新增成功

 

1.10.3 建立倉庫

準備工作已經完畢,右上角點選建立一個新的倉庫

        建立倉庫,輸入個人資訊

        根據上面的提示,建立一個程式碼倉庫

        在個人主機上進行推播測試

[root@gitlab ~]# mkdir -p clsn 
[root@gitlab ~]# cd clsn/
[root@gitlab clsn]# echo "# test" >> README.md
[root@gitlab clsn]# git init
初始化空的 Git 版本庫於 /root/clsn/.git/
[root@gitlab clsn]# git add README.md
[root@gitlab clsn]# git commit -m "first commit"
[master(根提交) 089ae47] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
[root@gitlab clsn]# git remote add origin git@github.com:clsn-git/test.git
[root@gitlab clsn]# git push -u origin master
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.113' (RSA) to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:clsn-git/test.git
 * [new branch]      master -> master
分支 master 設定為跟蹤來自 origin 的遠端分支 master。

        推播完成,重新整理介面就可以發現,推播上去的README.md檔案

        建立新檔案,進行拉取測試

        建立好後點選下面的commit即可

        github新增成功,進行拉取測試

 

1.10.4 拉取檔案測試

檢視目錄內容

[root@gitlab clsn]# ls
README.md

進行拉取

[root@gitlab clsn]# git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
來自 github.com:clsn-git/test
   089ae47..a16be65  master     -> origin/master
更新 089ae47..a16be65
Fast-forward
 clsn.txt | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 clsn.txt 

        檢查檔案

[root@gitlab clsn]# ls
clsn.txt  README.md
[root@gitlab clsn]# cat clsn.txt 
# 這是慘綠少年的文件
# clsn blog  : http://blog.znix.top
# 慘綠少年的部落格為 : http://blog.znix.top

至此github的使用就介紹完了

1.11 JetBrains PyCharm 使用github

PyCharm 下載: http://www.jetbrains.com/pycharm/download/#section=windows

1.11.1 PyCharm github設定

        選擇github進行連線

        使用者密碼準確後會生產token

        然後點選ok即可

1.11.2 推播程式碼

現確保有之前安裝的windwosgit,測試路徑

        共用程式碼

        輸入資訊,進行共用

        程式碼發布成功 https://github.com/clsn-git/test1

至此pycharm使用github就完成了

1.12 pycharm使用gitlab

使用pycharm是的vcs,現在git

        輸入gitlab地址

然後輸入使用者名稱及密碼

        新增一些註釋資訊

        gitlab的介面中就能檢視到長傳的程式碼

至此pycharm使用gitlab就結束了

GitHub 教學系列文章: 

通過GitHub建立個人技術部落格圖文詳解  http://www.linuxidc.com/Linux/2015-02/114121.htm

GitHub 使用教學圖文詳解  http://www.linuxidc.com/Linux/2014-09/106230.htm 

使用Git命令從GitHub上下載原始碼  http://www.linuxidc.com/Linux/2017-11/148192.htm

使用 GitHub / GitLab 的 Webhooks 進行網站自動化部署  http://www.linuxidc.com/Linux/2016-06/131993.htm

多個GitHub帳號的SSH key切換 http://www.linuxidc.com/Linux/2016-05/131080.htm

如何在同一台電腦上使用兩個GitHub賬戶 http://www.linuxidc.com/Linux/2016-05/131079.htm

利用GitHub搭建個人Maven倉庫  http://www.linuxidc.com/Linux/2016-04/130197.htm

一分鐘認識GitHub http://www.linuxidc.com/Linux/2015-11/125089.htm

分享實用的GitHub 使用教學 http://www.linuxidc.com/Linux/2014-04/100556.htm 

GitHub使用操作指南  http://www.linuxidc.com/Linux/2016-10/135782.htm

GitHub使用方法入門基礎  http://www.linuxidc.com/Linux/2017-05/144084.htm


IT145.com E-mail:sddin#qq.com