標籤:
linux安裝Git
1.使用yum形式安裝,會直接把依賴的包都裝上
# yum install git
2.使用源碼形式安裝
官網地址 http://git-scm.com/
源碼:https://git-core.googlecode.com/files/git-1.9.0.tar.gz
源碼形式需要調用 curl, zlib, openssl, expat, libiconv等庫代碼,所以需要先安裝這些依賴工具。
# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
安裝檔案下載到指定檔案夾後使用如下命令安裝
# tar -xvzf git-1.9.0.tar.gz
# cd git-1.9.0
# ./configure --prefix=/usr/local
# make
# make install
安裝後看看版本
# git --version
git version 1.9.0
初次使用需要配置使用者資訊,配置個人資訊可以針對三種情況,1:針對系統,2:針對當前登入使用者,3:針對單個項目。
當前登入使用者配置如下:
$ git config --global user.name "youname"
$ git config --global user.email "[email protected]"
如果要針對系統則使用 --system, 針對項目則去掉--global選擇就可以了
$ git config -l # 查看使用者配置
伺服器上建立純倉庫,--shared選項是設定該倉庫加入到可寫的組
# git init firstproject.git --bare --shared
進入指定目錄後,clone遠程倉庫代碼
$ git clone ssh://[email protected]:6022/data/git/firstproject.git
$ git clone ssh://[email protected]:6022/data/git/firstproject.git newproject # 自訂項目名稱
$ git clone --bare ssh://[email protected]:6022/data/git/teacherapi.git # 複製純倉庫
進入到本地項目目錄後,右鍵菜單開啟git bash
$ git init # 初始化git項目
$ git add . # 添加到暫存(staged)地區,只處理添加和修改,不處理刪除
$ git add -A 處理所有:添加、修改、刪除
$ git add -u 處理修改和刪除,不處理新添加檔案
$ git reset HEAD filename # 取消已暫存的檔案
$ git reset --hard "log_hash" # 強制重設到指定版本,之後提交的檔案都會被刪除,並且相關提交日誌也會跟著刪除
$ git reset "log_hash" # 重設到指定版本,之後提交的日誌都會被刪除,但是之後提交的檔案會恢複到未跟蹤狀態
$ git reset HEAD^ # 取消最後一次提交,與git reset "log_hash"效果一樣
$ git revert "log_hash" # 撤銷某次操作, 那次添加的檔案會被刪除,但提交日誌不會刪除,同時會增加撤銷操作執行的日誌
$ git reflog # 查看所有HEAD的曆史,reset動作記錄會記錄到這裡,再次使用git reset "reflog_hash"可以恢複已刪除的記錄
如果因為reset等操作丟失一個提交的時候,總是可以把它找回來。除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。
$ git commit -m "initial project version" # 提交到本地倉庫
$ git commit -a -m "commit project" # 不通過暫存地區直接提交已跟蹤的檔案
$ git commit --amend # 修改最後一次提交message內容
$ git checkout -- filename # 取消對檔案的修改, 取消後在使用git status 查看狀態應該是未修改狀態
# 忽略已跟蹤的檔案
$ git rm --chached logs/xx.log (--cached參數表示刪除倉庫檔案同時保留本地檔案) 然後更新 .gitignore 忽略掉目標檔案,在然後 git commit -m "We really don‘t want Git to track this anymore!" 最後推送到遠程倉庫 git push origin master:master
有的時候工程裡面會有很多沒有追蹤的檔案和目錄,一個一個地刪除太麻煩。 git clean可以幫你大量刪除,非常的方便。下面介紹一下git clean的使用:
$ git clean -n 顯示要刪除的檔案
$ git clean -dn 顯示要刪除的檔案和目錄
$ git clean -di 進入互動模式
$ git clean -f 刪除未追蹤的檔案
$ git clean -dff 刪除未追蹤的目錄
$ git clean -df 刪除未追蹤的檔案和目錄(不包含ignored中檔案)
$ git clean -dxf # 清除所有未追蹤檔案,包括納入ignored的檔案
遠程倉庫使用
$ git remote add origin ssh://[email protected]:6022/var/git/firstproject.git # 添加遠程倉庫
$ git remote rm repository_name # 刪除遠程倉庫
$ git remote rename old_name new_name # 修改遠程倉庫名稱
$ git remote -v # 查看遠程倉庫資訊
$ git remote show origin # 查看指定遠程倉庫資訊
$ git push origin master:master or git push origin master # 推送到遠程分支 文法:git push[遠程名] [本地分支]:[遠程分支], 複製操作會自動使用預設的 master 和 origin 名字
$ git fetch origin master # 從遠程倉庫抓取資料, 文法:git fetch [remote-name], 注:fetch 命令只是將遠端的資料拉到本地倉庫,並不自動合并到當前工作分支
$ git pull origin master # 自動抓取資料下來,然後將遠端分支自動合并到本地倉庫中當前分支,如果發生衝突可以使git rebase --abort 終止合并
$ git mv readme.txt readme # 修改檔案名稱,需要執行commit和push命令才能更新到版本庫
$ git rm *.bak # 刪除檔案,需要執行commit和push命令才能更新到版本庫
$ git rm --cached log/\*.log # 刪除倉庫檔案的同時,保留本地檔案
# 忽略檔案,使用vi命令建立一個.gitignore的檔案
# 在pull過程中遇到衝突問題,編輯衝突檔案後,使用git add命令重新添加到緩衝區後,就可以正常執行git commit命令
分支使用
$ git branch hotfix # 建立分支
$ git checkout hotfix # 切換分支,切換過程中盡量避免存在緩衝區檔案
$ git checkout -f develop # 強制切換分支
$ git checkout -b branch_name # 建立新分支並切換到新分支
$ git checkout -b local-branchname origin/remote_branchname # 擷取遠程分支的同時建立本地分支
$ git merge develop # 這個命令把分支"develop"合并到了當前分支(master)裡面, 注意合并前先checkout到master分支
$ git branch -d hotfix # 刪除分支
$ git branch -D hotfix # 強制移除為未並的分支
$ git branch # 查看當前分支
$ git branch -a # 查看所有分支
$ git branch -r # 查看遠程分支
$ git branch -v # 查看個分支最後一次提交資訊
$ git branch --no-merged # 查看未合并的分支
$ git push origin hotfix:serverfix # 本地分支hotfix推送到遠程分支serverfix,如果遠程分支不存在則建立
$ git checkout -b serverfix origin/serverfix # 擷取到本地一份新的遠程分支
$ git checkout --track origin/serverfix # 跟蹤分支, 與該語句“git checkout -b serverfix origin/serverfix”效果一樣
$ git push origin :serverfix # 刪除遠程分支
$ git push origin --delete develo # 刪除遠程分支
$ git branch -r -d origin/develo # 刪除本地追蹤記錄
如果當前分支已經修改了,這時候正常切換是不允許的,可以使用git stash把修改的檔案暫存起來,等切換過來後在使用git stash apply 恢複之前的狀態
提交記錄
$ git log --all # 查看提交日誌
$ git log --author=myname # 查看指定使用者的提交記錄
$ git log --cherry develop # 查看指定分支提交記錄
合并
$ git merge hotfix # hotfix代碼合并到master分支(相當於在master分支上拉取hotfix分支代碼), 注意合并前先checkout到master分支
$ git merge develop --squash # 作為一個整體合并到當前分支,不會將develop裡面亂七八糟的提交記錄更新到當前分支,這相當於copy 操作,所以執行merge後還需要再次commit 。
$ git merge <commit-id> # 根據提交記錄合并
$ git merge 合并的時候有衝突解決完 執行git rebase --continue 來繼續合并。
指定檔案合并,例如將bug分支explain_edit.html檔案合并到develop分支explain_edit.html,可以這樣操作
$ git checkout develop # 先切換到develop
$ cd zhishidian/themes/manager/knowledge/explain # 進入檔案所在檔案夾
$ git checkout bug -- explain_edit.html # 合并檔案,合并後檔案處於修改狀態,注意--後面有空格。
標籤使用
$ git tag -a v0.1.2 -m "發布0.1.2版本" # 建立標籤
$ git fetch --tags # 擷取標籤
$ git checkout [tagname] # 切換標籤與切換分支命令相同
$ git show v0.1.2 # 查看標籤資訊
$ git tag -d v0.1.2 # 刪除標籤
$ git tag -a v0.1.1 9fbc3d0 # 補打標籤,"9fbc3d0"通過git log擷取某個提交對象的校正
$ git push origin v0.1.2 # 將v0.1.2標籤提交到git伺服器
$ git push origin v0.1.2:refs/tags/v0.1.2 # 指定標籤提交到伺服器指定位置
$ git push origin --tags # 將本地所有標籤一次性提交到git伺服器
$ git tag -l or --list # 查看所有標籤
$ git for-each-ref --sort=taggerdate --format ‘%(tag)‘ refs/tags|tail -3 # 按時間倒序取最後3條
# 也可以這樣排序
git log --tags --decorate --simplify-by-decoration
git log --tags --simplify-by-decoration --pretty="format:%ai %d"
其它
$ git rebase branch_name # 分支變基,已指定分支為基礎,把當前分支已經提交的記錄在追加到指定更新的分支上,這和當前分支上使用pull other_branch結果是一樣的,只是執行過程不一樣
$ git rebase --abort # 終止rebase,如果rebase過程中遇到衝突問題,可以使用--abort參數終止操作,解決衝突後還可以使用--continue繼續rebase
$git show HEAD # 查看當前分支當前的曆史狀態,HEAD表示當前分支最新版本,HEAD^表示HEAD父母的資訊,HEAD~4表示HEAD上溯四代的資訊
git是不能add空目錄的,如果想add空目錄的,則需要在目錄裡面添加一個檔案才能正常添加上,這個時候可添加.gitignore檔案當一個預留位置。
如果想一個(大)檔案永久刪除,既不要在版本庫記錄裡面看到也不要佔用版本庫空間的話,可以使用filter-branch,具體用法參考官方文檔。
$ git filter-branch --tree-filter ‘rm -f testme.txt‘ HEAD
$ git diff settings.py # 對比檔案修改內容
總結:
git裡面的檔案有以下幾種狀態
--未跟蹤 (untracked)
--已跟蹤 (tracked)
--已修改 (modified)
--已暫存 (staged)
--已提交 (commited)
--正常
拓展知識
SSH登入使用RSA認證認證代替密碼認證
建立RSA認證
開啟git bash後輸入 ssh-keygen -t rsa -C "[email protected]" 之後會在C:\Users\Administrator\.ssh\產生兩個檔案id_rsa,id_rsa.pub,這兩個一個是私密金鑰,一個是公開金鑰,建立過程中會提示輸入密碼,直接忽略就行了。
把已產生的id_rsa.pub(公開金鑰)上傳到linux伺服器上後,把該檔案內容添加到/root/.ssh/authorized_keys檔案中
可以使用如下命令:
$ scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa3.pub # 使用git bash將本地檔案上傳到伺服器
# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
使用git bash登入linux伺服器
$ ssh [email protected] 或 $ ssh -l username remotehost
$ ssh [email protected] -p6022 # 帶連接埠訪問
退出ssh可以使用exit命令
這幾篇Git文章寫的不錯
Git 版本管理工具(一)
http://blog.csdn.net/ithomer/article/details/7527877
Git 常用命令詳解(二)
http://blog.csdn.net/ithomer/article/details/7529022
Git 常用命令速查表(三)
http://blog.csdn.net/ithomer/article/details/7529841
http://rongjih.blog.163.com/blog/static/335744612010112562833316/
Git使用筆記