git編譯安裝與常用命令
阿新 • • 發佈:2019-01-10
git編譯安裝與常用命令
=========================================
一:編譯安裝與設定
1.1:簡介
github官網地址(下載原始碼包):https://github.com/git/git.git
git 在 windows mac等系統下載:https://git-scm.com/downloads
1.2:依賴關係(解決常見的依賴關係)
~]# yum -y install gcc openssl openssl-devel curl curl-devel unzip perl perl-devel expat expat-devel zlib zlib-devel asciidoc xmlto gettext-devel openssh-clients
~]# yum -y install openssh-clients
# ssh-keygen 出現 -bash: ssh: command not found 的解決辦法
1.3:編譯安裝
方式一:
~]# make prefix=/usr/local/git all doc
~]# make prefix=/usr/local/git install install-doc install-html
方式二:
~]# yum -y install autoconf
~]# make configure 或者 autoconf
# 備註:生成 configure 檔案
~]# ./configure --prefix=/usr/local/git
~]# make all doc
~]# make install install-doc install-html
方式三:
~]# yum -y install git # 安裝 git
~]# yum -y install git-all.noarch # 安裝 git 所有的包,非必須
1.4:環境配置
~]# echo 'export PATH=/usr/local/git/bin:$PATH' > /etc/profile.d/git.sh
~]# . /etc/profile.d/git.sh
~]# git --version # 檢視版本
1.5:man 文件配置
~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/git/share/man
檢視幫助
格式一:
~]# git help init
格式二:
~]# man git-init
1.6:ssh使用者,許可權,伺服器身份認證,初始化倉庫 與 拉取倉庫
1:新增使用者:
~]# useradd git
2:許可權(使用者組合使用者均為git):
/home/git/.ssh 許可權為:700
/home/git/.ssh/authorized_keys 許可權為:600
~]# mkdir /home/git/.ssh
~]# chmod 700 /home/git/.ssh
~]# touch /home/git/.ssh/authorized_keys
~]# chmod 600 /home/git/.ssh/authorized_keys
~]# chown -R git:git /home/git/.ssh
# 注意: id_rsa 許可權為 600 id_rsa.pub 許可權為 644
3:伺服器身份認證(authorized_keys):
把本地的公鑰 id_rsa.pub 裡面的內容加入到 /home/git/.ssh/authorized_keys,一行一個,可以加入多個公鑰,git 操作時不再需要密碼。
4:初始化倉庫:(結尾為 .git)
建立空專案
~]# cd /home/git # 進入git家目錄
~]# git init --bare useryx.git
# 例如 git init --bare 倉庫名.git
專案已有內容
~]# git init
# cd 進入專案進行初始化
~]# git clone --bare 目錄名 倉庫.git
# 例如:git clone --bare useryx useryx.git
# 倉庫外面執行
5:修改倉庫使用者組為 git
~]# chown git:git useryx.git
6:拉取倉庫
~]# git clone [ssh://]使用者名稱@地址:倉庫名.git
# 例如:git clone [email protected]:useryx.git 或者 家目錄下的一個檔案內如 git clone [email protected]:/home/git/dir/a.git
1.7:禁止ssh使用者登入,可以不用設定。
~]# vim /etc/passwd
# 修改git 使用者登入shell
1:使用linux系統的 /sbin/nologin 不允許登入
git:x:1001:1001::/home/git:/sbin/nologin
2:使用git服務 git-shell 的 /usr/local/git/bin/git-shell,which git-shell 檢視命令位置。
git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell
二:客戶端初始化配置
2.1:客戶端生成公鑰與私鑰 ssh-keygen(切換至需要生成公鑰與私鑰的使用者)
~]# su - git # 切換至git使用者
~]# ssh-keygen
# 使用預設 rsa 演算法,2048 長度
~]# ssh-keygen -t rsa -b 4096 -C ' [email protected]' -P '3a/Jd3v1wq6M1lrAO+Qc4bCHb2W3SynSTg3CT1GS'
# -t 指定演算法
# -C 新增一個註釋
# -b 指定加密長度,預設是2048,建議為4096
# -P 使用加密密碼串
~]# openssl rand -base64 30 # 30 為生成字串的長度
# 使用 ssh-keygen 按照提示操作,也可直接回車。
2.2:設定使用者名稱和郵箱
~}# git config --global user.name "使用者名稱"
~}# git config --global user.email "郵箱@aliyun.com"
2.3:初始化新增資料夾
1:建立新版本庫(正常流程操作)
git clone [email protected]:useryx.git
cd useryx
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
2:已存在的資料夾或 Git 倉庫
cd useryx
git init
git remote add origin [email protected]:useryx.git
git add .
git commit -m '初始化'
git push -u origin master
2.4:檢視預設配置檔案
~]# git config --list 或者 git config --l
2.5:不更新檔案( .gitgmore)
~]# find ./ -name .gitignore
# 查詢 .gitignore 檔案
~]# find ./ -name .gitignore -delete
# 刪除 .gitignore 檔案
# 不更新的檔案或目錄放於此檔案中
2.6:本地克隆
~]# git clone file://root/test /tmp/test
~]# git clone test /tmp/test
# 本地的 git 專案克隆
三:基礎操作
3.1:新增檔案(add)
~]# git add filename
# 新增某個檔案
~]# git add . 或者 git add -A
# 添加當前目錄所有檔案
3.2:刪除檔案(rm)
~]# rm # 刪除檔案但不會刪除索引
~]# git rm -f filename # 未提交需要 -f 刪除
~]# git rm filename # 刪除檔案並刪除索引
~]# git rm --cached file # 刪除索引,改變為未追蹤狀態
~]# git cat-file -p hash碼 # 檢視檔案內容
3.3:修改檔案(mv)
~]# mv # 索引新增新檔案,原來的索引會保留。提交時會有錯誤
~]# git mv filename newfilename # 修改檔案同時修改索引
3.4:索引檔案新增到快照(commit)
~]# git commit -m '註釋'
~]# git commit -am '註釋' # 新增檔案並提交註釋
3.5:狀態
~]# git status
3.6:檔案追蹤
已追蹤的(tracked)
~]# git ls-files
未追蹤的(igored)
~]# git ls-files -o
被忽略的(untracked):
檢視檔案 .gitignore
3.7:提交與拉取
~]# git pull
# 拉取:從遠端獲取最新版本到本地,不會自動merge
~]# git fetch
# 拉取:從遠端獲取最新版本到本地,會自動merge
~]# git push origin master
# 提交:推送本地到遠端主分支,
3.8:日誌(log)
~]# git log
~]# git log --oneline
# 行顯示,短格式
~]# git log --graph
# 樹型圖
~]# git log --pretty=oneline --abbrev-commit
3.9:檔案比較不同
~]# git diff filename1 filename2
# 比較檔案
~]# git diff dev
# 比較當前分支與主分支
3.9:撤銷操作(reset)
1:git reset –mixed <commit id> <filename>:此為預設方式,它回退到某個版本,只保留原始碼,回退commit和index資訊
2:git reset –soft <commit id> <filename>:只回退 commit 的資訊,保留 index ,如果還要提交,直接commit
3:git reset –hard <commit id> <filename>:徹底回退到某個版本,本地的原始碼也會變為上一個版本的內容
HEAD:當前分支的最近提交
ORIG_HEAD:合併時,新生成的提交保存於此引用中
HEAD^ 回滾前一次,工作目錄不受影響
^ 回退到上一次
~<n> 回到幾次,等於連續的 HEAD^
~]# git reset --hard ORIG_HEAD # 提交後回退 commit 之前狀態
四:分支
3.1:檢視與新建分支
~]# git branch --all
~]# git branch --list
3.:2:建立與切換分支
~]# git branch <branch> # 建立分支(基於當前分支)
~]# git branch <branch> <hsah碼> # 建立分支(基於指定 commit id 分支)
~]# git branch bug/first # 建立父目錄分支(基於當前分支)
~]# git branch bug/first <hsah碼> # 建立父目錄分支(基於指定 commit id 分支)
~]# git checkout <branch> # 切換分支
~]# git checkout -b <branch> # 建立分支時直接切換
3.3:檢視分支以及相關的提交
~]# git branch # 列出分支
~]# git branch --list # 列出分支
~]# git show-branch <branch> # 顯示branch分支詳細資訊
3.4:刪除分支
~]# git branch -d <branch>
~]# git branch -D <branch> # 強制刪除分支
~]# git push origin --delete <branch> # 刪除遠端分支
~]# git push --delete origin <branch> # 刪除遠端分支
3.5:繫結本地分支到遠端
~]# git push --set-upstream origin dev
# 本地在 dev 分支上,執行此次操作後在 dev 分支只使用 git push
3.6:比較兩個分支差異
~]# git diff dev
# 比較當前分支與 dev 分支的區別
3.5:合併分支
~]# git merge dev
# 合併 dev 分支到當前分支
3.7:恢復到合併之前
~]# git reset --merge
# 撤銷到合併之前
3.8:檢視失敗的合併檔案資訊
~]# git ls-files --unmerged
1:基礎版本
2:我們的版本
3:他們的版本
~]# cat filename(衝突的檔案)修改檔案內容
++<<<<<
============
++>>>>>>>>>.
# 修改完成檔案後 add 再次提交
3.9:重新命名分支
~]# git branch -m <branch> <newbranch> # 重新命名本地分支
3.10:推送分支
~]# git push origin <branch> # 推送本地分支到遠端
五:打標籤
5.1:tag介紹
git 有 commit,commit號是一串字元不便於查詢,而 tag 的作用是更加清晰明瞭。
把完整的專案提交到 tag 標籤,就可以實現版本的持續釋出。
5.2:建立標籤
~]# git tag <name>
5.3:檢視標籤
~]# git tag
~]# git show <tag name> # 可以檢視到commit id
5.4:對 commit id 打標籤
~]# git tag <tag name> <commit id>
~]# git tag -a <tag name> -m "註釋資訊" <commit id>
5.5:刪除標籤
~]# git tag -d <tagname> # 本地標籤
~]# git push origin :refs/tags/<tagname> # 遠端標籤
5.6:推送標籤
~]# git push origin <tagname> 推送指定的
~]# git push origin --tags # 推送全部
六:常見問題解決辦法
6.1:git status 檢視狀態時中文亂碼
git config --global core.quotepath false
6.2:檔案許可權引起的衝突(檔案顯示被修改)(低版本git一般會出現此問題)
git config core.filemode false