歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux 環境下安裝Git

Linux 環境下安裝Git

日期:2017/3/3 12:42:17   编辑:Linux技術
Linux下git安裝配置
源碼安裝
下載最新 Git2.8.2 ,執行下面命令
tar -xzf git-2.8.2.tar.gz
cd git-2.8.2
-- 配置安裝路徑
./configure -prefix=/usr/local/git --with-curl --with-expat
make && make install
修改/etc/profile,在PATH中加入git路徑,並執行source
/etc/profile
export GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin:$GIT_HOME/libexec/git-core
確認是否安裝成功
git --version
=============到這裡就安裝完成了,下面是會遇到的錯誤和解決辦法=============
可能碰見的錯誤:
a、GIT錯誤
usr/local/git/share/locale'
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
解決:yum install perl-ExtUtils-MakeMaker
b、tclsh failed; using unoptimized loading
MSGFMT po/de.msg make[1]: *** [po/de.msg] Error 127
解決:yum install tcl
c、/bin/sh: msgfmt: command not found
make: *** [po/build/locale/da/LC_MESSAGES/git.mo] Error 127
解決:yum install gettext-devel
d、git clone時候提示fatal: Unable to find remote helper for 'https'
解決:yum install libcurl-devel
3、復制命令補全腳本 並執行腳本
cp contrib/completion/git-completion.bash /etc/
sh /etc/git-completion.bash
試試輸入”git li”, 再按下 TAB 就可以自動提示補全。
二、Windows下git使用
windows下有下個幾個git客戶端,我選擇的是Cygwin。
Cygwin http://www.cygwin.com/ 安裝參考 cygwin安裝說明
msysGit http://msysgit.github.com/
TortoiseGit http://code.google.com/p/tortoisegit/
三、git使用說明
1、添加git配置信息
git config --global user.name "Steven"
git config --global user.email [email protected]
Git的配置信息分為全局和項目兩種,上面命令中帶了“--global"參數,這就意味是在進行全局配置,它會影響本機上的每個一個Git項目。
查看全局配置信息,可以看到我們配置的用戶名和郵箱。
$ cat ~/.gitconfig
[user]
name = userName
email = [email protected]
2、創建本地倉儲
#創建版本庫目錄
mkdir -p gitdemo
cd gitdemo
echo “README” > readme.txt
#初始化版本庫
git init
Initialized empty Git repository in /data/gitdemo/.git/
#把前目錄下的所有文件全部添加到暫存區
git add .
#創建提交
git commit -m 'init'
[master (root-commit) 55f9dbb] init
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
#查看git文件信息
git show
commit 55f9dbb575f536702eb02a09fe65d8d060769380
Author: Steven <[email protected]>
Date: Thu Nov 15 23:11:55 2012 +0800
init
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000..6372732
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1 @@
+“README”
3、git基本操作
#clone一個項目
git clone ssh://git@lifeba_vps:bqueue.git
添加文件到版本庫
git add test2.txt
git commit -m "add test2.txt"
git push
獲取最新代碼
git pull
git fetch git路徑
更新文件提交
git commit -a 或 git commit -a -e 提交全部修改文件,並調用vim編輯提交日志。
git push
查看狀態
git status #查看版本庫的狀態。可以得知哪些文件發生了變化,哪些文件還沒有添加到git庫中等等。 建議每次commit前都要通過該命令確認庫狀態。
查看未版本控制
git clean -dxf 用於清除未跟蹤文件。
git clean -dnf 可以顯示需要刪除的文件,但不包括被.gitignore忽略的。
沖突解決
git rebase
git add -u 表示把所有已track的文件的新的修改加入緩存,但不加入新的文件。
git rebase --continue #有沖突繼續解決,重復這這些步驟,直到rebase完成。
如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
git rebase --skip
如果想回到rebase執行之前的狀態,可以執行:
git rebase --abort
注:rebase之後,不需要執行commit,也不存在新的修改需要提交,都是git自動完成。
四、gitosis安裝和配置
1、gitosis安裝
cd /disk/src
git clone https://github.com/res0nat0r/gitosis.git
cd gitosis/
python setup.py install
2、gitosis配置
a、
因為要涉及到ssh操作,使用必須建個單獨的用戶,不能使用超級用戶。
#創建目錄
mkdir /data/git
#添加git用戶,並且制定到/data/git目錄下
useradd \
-r \
-s /bin/sh \
-c 'git version control' \
-d /data/git \
git
#對git目錄設置用戶和組為git
chown git:git /data/git
#設置成功後,執行ll看到用戶和組都是git
ll
drwxr-xr-x 2 git git 4096 Nov 16 00:41 git
b、
在本機的客戶端上面生成ssh的key,然後上傳到gitosis的服務器上面。
#生成pub文件,將pub文件放置到:/tmp/id_rsa.pub
ssh-keygen -t rsa
gitosis的服務器切換到git用戶:
su - git
然後執行
-sh-4.1$ gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /data/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /data/git/repositories/gitosis-admin.git/
注意在root中執行:sudo -H -u git gitosis-init < /tmp/id_rsa.pub ,會出現下面異常,所以切換到git用戶。
File "/usr/local/bin/gitosis-init", line 8, in <module> 異常。
執行成功後查看key是不是已經設置成功,執行下面命令後可以看到我們提交的id_rsa.pub內容
cat ~/.ssh/authorized_keys
對post-update目錄設置權限
chmod 755 /data/git/repositories/gitosis-admin.git/hooks/post-update
五、本機操作gitosis-admin項目
通過上面的操作後,本機的客戶端已經可以通過ssh訪問到服務器的gitosis-admin項目(本身也是通過git來管理的),這樣可以通過本機的git操作來同步到服務器的gitosis中。
1、Creating new repositories,本地拉下gitosis-admin項目。
git clone git@lifeba_vps:gitosis-admin.git
Cloning into 'gitosis-admin'...
注意,可能出現下面的錯誤:
Traceback (most recent call last):
File "/usr/local/bin/gitosis-serve", line 8, in <module>
load_entry_point('gitosis==0.2', 'console_scripts', 'gitosis-serve')()
File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 24, in run
return app.main()
File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/app.py", line 38, in main
self.handle_args(parser, cfg, options, args)
File "/usr/local/lib/python2.7/site-packages/gitosis-0.2-py2.7.egg/gitosis/serve.py", line 213, in handle_args
os.execvp('git', ['git', 'shell', '-c', newcmd])
File "/usr/local/lib/python2.7/os.py", line 344, in execvp
_execvpe(file, args)
File "/usr/local/lib/python2.7/os.py", line 380, in _execvpe
func(fullname, *argrest)
OSError: [Errno 2] No such file or directory
fatal: The remote end hung up unexpectedly
解決方法:在gitosis服務器上面建個軟連接
ln -s /usr/local/git/bin/git /usr/local/bin/git
2、gitosis-admin項目說明
a、文件說明
cd gitosis-admin
Administrator@Steven-PC /cygdrive/e/research/gitosis-admin
$ ls -l
總用量 1
-rw-r--r-- 1 Administrator None 93 十一 16 01:49 gitosis.conf
drwxr-xr-x+ 1 Administrator None 0 十一 16 01:49 keydir
gitosis.conf是gitosis的配置文件,用於配置用戶和權限
keydir/是所有組成員的公鑰
我們可以在本地修改配置更改權限,然後push到服務端後,服務器端就立刻生效
b、添加一個其他客戶端ssh支持,這樣其他的客戶端可以訪問到gitosis的對應項目。
先查看現有的配置,下面只有一個gitosis-admin組,members中的Administrator@Steven-PC就是本機客戶端名,writable,表示對gitosis-admin項目有讀寫操作權限。這些都是上面我們通過ssh來配置生成的。
$ cat gitosis.conf
[gitosis]
[group gitosis-admin]
members = Administrator@Steven-PC
writable = gitosis-admin
c、現在我們往gitosis上面提交一個bqueue項目。
先定義賬號權限,我們在後面自定義一個組bqueue,同樣指定Administrator@Steven-PC可以讀寫bqueue項目。
[group bqueue]
members = Administrator@Steven-PC
writable = bqueue
然後push到服務器,將本地的配置push到gitosis服務器上面。
git commit -a -m "Allow Steven write access to bqueue"
[master 9b1959b] Allow Steven write access to bqueue
1 files changed, 4 insertions(+), 0 deletions(-)
$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 378 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:gitosis-admin.git
507d7cf..9b1959b master -> master
上面的操作就更新了服務端的權限。
d、push本地的bqueue項目到gitosis服務器上面。
完成了上面的權限設置後,就可以通過下面命令,將本地的bqueue項目提交給gitosis服務器。
git remote add origin ssh://git@lifeba_vps/bqueue.git
git push origin master
Initialized empty Git repository in /data/git/repositories/bqueue.git/
Counting objects: 192, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (181/181), done.
Writing objects: 100% (192/192), 921.81 KiB, done.
Total 192 (delta 54), reused 0 (delta 0)
To ssh://git@lifeba_vps/bqueue.git
* [new branch] master -> master
六、訪問bqueue項目
上面我們已經提交了一個bqueue項目到gitosis服務器,如何讓其他用戶訪問並操作該項目呢?
首先必須先配置ssh權限,在需要訪問該bqueue項目的客戶端上面,同樣要生成一個ssh的key。
在目標客戶端機上面執行下面命令,將生成id_rsa.pub提交給擁有gitosis-admin控制權限的用戶,這裡就是:Administrator@Steven-PC用戶。
#生成ssh的key
ssh-keygen -t rsa
在Administrator@Steven-PC的機子上面做如下操作,先切換到gitosis-admin項目下:
cd keydir/ #將 我們將id_rsa.pub重名為 [email protected] ,並放到這裡。
git add keydir/[email protected] #添加到git緩存中。
修改gitosis.conf 加入lifeba@vps
[group bqueue]
members = Administrator@Steven-PC lifeba@vps
writable = bqueue
提交並推送到gitosis服務器
git commit -a -m "Allow lifeba@vps write
access to bqueue"
git push
完成上面的操作後,目標客戶端就可以通過git clone來訪問bqueue項目了。執行下面命令來clone項目。
git clone git@lifeba_vps:bqueue.git
可能出現的錯誤:
1、Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
fatal: Could not read from remote repository.
ssh的權限沒配置好。
2、ERROR:gitosis.serve.main:Repository read access denied
fatal: Could not read from remote repository.
gitosis.conf中的members與keydir中的用戶名不一致,如gitosis中的members = lifeba@vps,但keydir中的公密名卻叫id_rsa.pub
七、git常用命令
git pull --rebase
git rebase --continue
git pull --rebase其實就等於git fetch + git rebase
git diff 查看修改和緩存中的修改信息
git diff cache 查看緩存中的和commit中的修改信息
git branch -a 查看所有分支。
git branch new_branch 創建新的分支。
git branch -d branch 刪除分支。
git checkout branch 切換當前分支。-f參數可以覆蓋未提交內容。
git branch -v
git remote -v
.gitignore 在規則建立之前的就已經在代碼庫中的文件不會受到忽略規則的影響,要移除這些文件,只能輸入git rm filename來移除。
git rm -f *.o 取消跟蹤並在工作目錄中刪除
git rm --cached readme.txt 取消跟蹤不在工作目錄中刪除
git mv file_from file_to 相當於 mv README.txt README $ git rm README.txt $ git add README
git log -p -2 -p 選項展開顯示每次提交的內容差異,用 -2 則僅顯示最近的兩次更新:
git log --stat 簡要顯示
git log --pretty=format:"%h - %an, %ar : %s"
git log --pretty=format:"%h %s" --graph
git log --since=2.weeks
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
git reset HEAD benchmarks.rb 取消已經暫存的文件
git checkout -- benchmarks.rb 取消對文件的修改
git remote -v 查看現有的遠程倉庫
git remote add pb git://github.com/paulboone/ticgit.git 添加一個遠程倉庫 並用pb命名。
git remote rm paul 刪除遠程倉庫
git remote rename pb paul 重名遠程倉庫 本地也會跟著修改
git remote 查看遠程參考
git remote show
git branch 顯示所有開發分支
git branch experimental 創建新的開發分支
git checkout experimental 切換到”experimental”分支
git merge experimental 合並分支,如果這個兩個分支間的修改沒有沖突(conflict), 那麼合並就完成了。如有有沖突,輸入下面的命令就可以查看當前有哪些文件產生了沖突:$ git diff,git commit -a
git branch -d experimental 刪除分支(合並過才刪除)
git branch -D crazy-idea 強制刪除分支
Copyright © Linux教程網 All Rights Reserved