關於Git的使用會這些命令就夠了

git 與 svn 的區別

  • 存儲方式
  • 使用方式
  • 管理模式

git 提交代碼流程

本地開發分支,使用 add 命令將修改的內容添加到本地緩存空間,經過 commit 命令將添加的內容提交到本地倉庫, push 命令將本地倉庫的內容提交到關聯的遠程倉庫。java

DEVER -------(add) --> local cache ------(commit)--> local repository -------(push)--> remote repository
複製代碼

SVN 管理模式

local  -->  remote
remote掛了,致使本地不能作任何操做
複製代碼

GIT 管理模式

git 本地能夠作remote同樣的操做。
git能夠關聯多個遠程倉庫。

git remote還能夠備份。

git使用K-V存儲數據。SVN使用複製版本完成可回滾操做。
複製代碼

git 核心命令

建立、克隆、添加、提交、push、pull、更新、關聯遠程nginx

- 建立git項目,生成一個 .git 目錄
git init
git remote add origin XXX.git
echo 'You is a bad man, haha!' > readme.md
git status 
git add -A
git commit -m '提交記錄'

git push --set-upstream origin master (首次),後面git push便可
git pull
git clone XXX.git 本地目錄名
複製代碼

管理模式

mkdir -p src/main/java/com
echo 'package com' > hello.java
git remove --cached target -r
git commit -am '註釋'
git commit -m '註釋'
複製代碼

分支管理命令

git branch : #顯示本地分支
git branch -av : #包含顯示遠程分支
git branch -avv : #包含顯示遠程分支,包含關聯信息
git branch 新分支name   :# 基於當前分支新建分支
git branch 新分支name  #已存在分支 :# 基於已存在分支新建分支
git branch 新分支name commitid :# 基於提交id新建分支
git checkout 分支名  : #切換分支
git branch -d 分支名: # 刪除分支
git merge branch : #將branch合併到當前分支

# 刪除遠程分支
$ git branch -r -d origin/ci
Deleted remote-tracking branch origin/ci (was 0a54700).

複製代碼

Git 子模塊 git add出現 「fatal: in unpopulated submodule XXX」 錯誤

git add出現 "fatal: in unpopulated submodule XXX" 錯誤:git

當前處於: F:\217my_optLogs\001系統相關\系統設計\007\oschina\ydgw2407.github.io\themes 下面有目錄2個:github

hexo-theme-matery landscapeweb

由於hexo-theme-matery是從另外一個第三方的倉庫克隆的,在執行git add的時候"fatal: in unpopulated submodule hexo-theme-matery" 錯誤shell

解決辦法,在當前目錄打開git bash,執行:數據庫

git rm -rf --cached hexo-theme-matery
git add hexo-theme-matery/*
複製代碼

能夠看到該目錄已經add成功。緩存

遠程倉庫

git remote -v : #查看遠程信息
git remote add origin XXX.git
git remote add origin2 XXX.git
git push --upstream  origin2 master : #推送到關聯的第二個倉庫
git push origin[2]
git remote remove 遠程倉庫名 : # 刪除關聯的遠程倉庫
複製代碼

日誌

git log: # 查看提交日誌
git log --online : # 一行行的查看
git log branch --online: # 查看分支的日誌
git log dev..master : # master有多少提交沒有同步到dev來。
git log --graph --online : #查看提交網絡圖
git show [commitId]: #展現變動的內容
複製代碼

恢復歷史 reset

場景: 當咱們提交了錯誤的代碼後,想回歸到原來的某個版本 可使用 reset 操做。bash

## 查看reset的語法
git help reset
複製代碼

語法

將當前分支的head指向指定的commitid狀態, work tree 依賴於模式mode。網絡

git reset [<mode>] [<commit>]
複製代碼

mode 的值:

  • --soft :不會改變index文件和working tree,僅僅將head指向了commitid,使用git sattus查看時,發現是還沒有提交的,你須要手動進行commit。
  • --mixed :這是默認值。重設index文件,可是不會改變working tree。更改後的文件被保留,可是不會被標記爲commited。
  • --hard :重設index文件和working tree。全部在commitid後發生的改變均會捨棄掉。
  • --merge:合併,意義不大。commitid和當前head版本中的某個文件在本地被改變的話就會放棄reset。
  • --keep:commitid和當前head版本中的某個文件在本地被改變的話就會放棄reset。

例如:回退到commitid 1a02031a7d86684246d878a58ff4e1601f14afb7 的版本。

git reset 1a02031a7d86684246d878a58ff4e1601f14afb7
複製代碼

此時,遠程分支的代碼已經在commitid版本以後了,因此push會失敗,可使用強制push覆蓋掉遠程代碼庫。

git push -f origin
複製代碼

git 原理

git 存儲對象

git 是一個內容尋址文件系統,核心是一個簡單的KV數據庫,插入任意內容會返回一個用於取回該值的hash。

find .git/objects/ -type f : 查找全部的git對象
git hash-object -w README.md
git cat-file -p commitId > README.md : # 回滾內容,能夠將commitId的內容寫入到README.md中,完成了一次回滾的操做
git cat-file -t commitID : # 查看數據類型


> git add  會在objects添加對象。 
> 使用後能夠 用  find .git/objects -type f 查看是否新增了對象。
```bash
$ find .git/objects -type f
.git/objects/69/f22ff2d6d6d4d8288fa9fa99ac2d58927ab1d6
.git/objects/99/f5369cae277ef56123d0012e2ef952e2e9d825

$ git add git基礎.md

$ find .git/objects -type f
.git/objects/69/f22ff2d6d6d4d8288fa9fa99ac2d58927ab1d6
.git/objects/90/0aabe1fb581794dd7e5cd238828f112f5109af   #新增的
.git/objects/99/f5369cae277ef56123d0012e2ef952e2e9d825

複製代碼

搭建企業私有git服務

git 支持的協議

local 協議

本地共享目錄; 快速;簡單;局域網; 速度慢; 僅僅小項目;

D盤建立倉庫:

git init --bare hello.git : 建立一個裸項目
複製代碼

E盤克隆:

git clone  /d/XXX/git
複製代碼

這樣本地倉庫在E盤,遠程分支在D盤,就是一個基本的git服務了。

ssh 協議

git init --bare hello.git : 建立一個裸項目
複製代碼
git clone root@ip:XXX.git
複製代碼
ssh-keygen
複製代碼

http 協議

nginx 是基礎(3 years experience)

git協議

通常不用

基於 gogs 開發企業git web 服務

比 gitlab 輕便

下載gogs版本

github.com/gogs/gogs/r… 選擇要下載的版本

解壓運行

在解壓後的根目錄下執行

gogs.exe web
複製代碼

訪問gogs web 服務

http://localhost:3000/ 能夠看到gogs服務啓動成功

首次配置

第一次進入web頁面進行配置信息

gogs 備份

gogs.exe backup
複製代碼

會在根目錄生成一個備份文件如: gogs-backup-20181004183106.zip

gogs 恢復

gogs.exe restore --from=gogs-backup-20181004183106.zip
複製代碼
相關文章
相關標籤/搜索