『壹』 怎麼clone自己搭建的git伺服器
首先需要裝好CentOS系統,作為測試,你可以選擇裝在虛擬機上,這樣比較方便。這步默認你會,就不講了。
有了CentOS,那麼如何搭建Git伺服器呢?
1、首先需要安裝Git,可以使用yum源在線安裝:
[root@localhost Desktop]# yum install -y git
2、創建一個git用戶,用來運行git服務
# adser git
3、初始衡跡化git倉庫:這里我們選擇/data/git/learngit.git來作為我們的git倉庫
[root@localhost git]# git init --bare learngit.git
Initialized empty Git repository in /data/git/learngit.git/
執行以上命令,會創建肆配一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾。然後,把owner改為git:
[root@localhost git]# chown git:git learngit.git
4、在這里,Git伺服器就已經搭得差不多了。下面我們在客戶端clone一下遠程倉庫
Zhu@XXX /E/testgit/8.34
$ git clone [email protected]:/data/git/learngit.git
Cloning into 'learngit'...
The authenticity of host '192.168.8.34 (192.168.8.34)' can't be established.
RSA key fingerprint is 2b:55:45:e7:4c:29:cc:05:33:78:03:bd:a8:cd:08:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.8.34' (RSA) to the list of known hosts.
[email protected]'s password:
這里兩點需要注咐雹並意:第一,當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因為Git使用SSH連接,而SSH連接在第一次驗證GitHub伺服器的Key時,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的伺服器,輸入yes回車即可。
Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表裡了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個警告只會出現一次,後面的操作就不會有任何警告了。
如果你實在擔心有人冒充GitHub伺服器,輸入yes前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致。
第二,這里提示你輸入密碼才能clone,當然如果你知道密碼,可以鍵入密碼來進行clone,但是更為常見的方式,是利用SSH的公鑰來完成驗證。
5、創建SSH Key
首先在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用默認值即可,由於這個Key也不是用於軍事目的,所以也無需設置密碼。
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
6、Git伺服器打開RSA認證
然後就可以去Git伺服器上添加你的公鑰用來驗證你的信息了。在Git伺服器上首先需要將/etc/ssh/sshd_config中將RSA認證打開,即:
1.RSAAuthentication yes
2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
這里我們可以看到公鑰存放在.ssh/authorized_keys文件中。所以我們在/home/git下創建.ssh目錄,然後創建authorized_keys文件,並將剛生成的公鑰導入進去。
然後再次clone的時候,或者是之後push的時候,就不需要再輸入密碼了:
Zhu@XXX/E/testgit/8.34
$ git clone [email protected]:/data/git/learngit.git
Cloning into 'learngit'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
7、禁用git用戶的shell登陸
出於安全考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
最後一個冒號後改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。
『貳』 如何從遠程git伺服器上拉取一個新建的git項目
git clone +遠程倉庫地址x0dx0a這里需要注意了,遠程倉庫會有兩個地址,一個是使用SSH協議,一個是使用HTTP協議x0dx0a如果你以後需要有push的許可權,要使用SSH協議的那個倉庫地址x0dx0a如果你只是下下來研究代碼,不需要上傳本地的修改,可以使用HTTP協議的地址。
『叄』 如何搭建linux git伺服器
首先我們分別在Git伺服器和客戶機中安裝Git服務程序(剛剛實驗安裝過就不用安裝了):
[root@linuxprobe ~]# yum install git
Loaded plugins: langpacks, proct-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Package git-1.8.3.1-4.el7.x86_64 already installed and latest version
Nothing to do
然後創建Git版本倉庫,一般規范的方式要以.git為後綴碼罩:
[root@linuxprobe ~]# mkdir linuxprobe.git
修改Git版本倉庫的所有者與所有組:
[root@linuxprobe ~]# chown -Rf git:git linuxprobe.git/
初始化Git版本倉庫:
[root@linuxprobe ~]# cd linuxprobe.git/
[root@linuxprobe linuxprobe.git]# git --bare init
Initialized empty Git repository in /root/linuxprobe.git/
其實此時你的Git伺服器就已經部署好了笑瞎,但用戶還不能向你推送數據,也不能克隆你的Git版本倉庫,因為我們要在伺服器上開放至少一種支持Git的協議,比如HTTP/HTTPS/SSH等,現在用的最多的就是HTTPS和SSH,我們切換至Git客戶機來生成SSH密鑰:
[root@linuxprobe ~]# 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:
65:4a:53:0d:4f:ee:49:4f:94:24:82:16:7a:dd:1f:28 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| .o+oo.o. |
| .oo *.+. |
| ..+ E * o |
| o = + = . |
| S o o |
| |
| |
| |
| |
+-----------------+
將客戶機的公鑰傳遞給Git伺服器:
[root@linuxprobe ~]# ssh--id 192.168.10.10
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.10.10'"
and check to make sure that only the key(s) you wanted were added.
此時就已經可以從Git伺服器中克隆版本倉庫了(此時目錄內沒遲升鬧有文件是正常的):
[root@linuxprobe ~]# git clone [email protected]:/root/linuxprobe.git
Cloning into 'linuxprobe'...
warning: You appear to have cloned an empty repository.
[root@linuxprobe ~]# cd linuxprobe
[root@linuxprobe linuxprobe]#
初始化下Git工作環境:
[root@linuxprobe ~]# git config --global user.name "Liu Chuan"
[root@linuxprobe ~]# git config --global user.email "[email protected]"
[root@linuxprobe ~]# git config --global core.editor vim
向Git版本倉庫中提交一個新文件:
[root@linuxprobe linuxprobe]# echo "I successfully cloned the Git repository" > readme.txt
[root@linuxprobe linuxprobe]# git add readme.txt
[root@linuxprobe linuxprobe]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: readme.txt
#
[root@linuxprobe linuxprobe]# git commit -m "Clone the Git repository"
[master (root-commit) c3961c9] Clone the Git repository
Committer: root
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
[root@linuxprobe linuxprobe]# git status
# On branch master
nothing to commit, working directory clean
但是這次的操作還是只將文件提交到了本地的Git版本倉庫,並沒有推送到遠程Git伺服器,所以我們來定義下遠程的Git伺服器吧:
[root@linuxprobe linuxprobe]# git remote add server [email protected]:/root/linuxprobe.git
將文件提交到遠程Git伺服器吧:
[root@linuxprobe linuxprobe]# git push -u server master
Counting objects: 3, done.
Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:/root/linuxprobe.git
* [new branch] master -> master
Branch master set up to track remote branch master from server.
為了驗證真的是推送到了遠程的Git服務,你可以換個目錄再克隆一份版本倉庫(雖然在工作中毫無意義):
[root@linuxprobe linuxprobe]# cd ../Desktop
[root@linuxprobe Desktop]# git clone [email protected]:/root/linuxprobe.git
Cloning into 'linuxprobe'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
[root@linuxprobe Desktop]# cd linuxprobe/
[root@linuxprobe linuxprobe]# cat readme.txt
I successfully cloned the Git repository
http://www.linuxprobe.com/chapter-21.html#214_Git這篇是詳細介紹Git的,中間有一部分是怎麼去搭建,你可以看下
『肆』 配置git連接遠程碼雲倉庫,並且碼雲倉庫代碼部署到伺服器
``ssh-keygen -t rsa -C 「您的郵箱地址」``
Your identification has been saved in /Users/you/.ssh/id_rsa.
# Your public key has been saved in /Users/you/.ssh/id_rsa.pub.
cd ~/.ssh
查看公鑰
cat id_rsa.pub
復制粘貼到碼雲上
到本地項目文件夾下,右鍵點擊空白處,選擇Git Bash Here,進入git窗口
一波操作後的頁面
whereis git
yum install -y git
git version
eg: cd /home/www/test
git init
git config --global user.name "您的用戶名稱"
git config --global user.email "您的郵箱地址"
git remote add origin 自己的倉庫地址
eg:git remote add origin https://gitee.com/***/**.git
ssh -v [email protected]
然後輸入 yes
我拉取的是master分支
git pull origin master
如果拉文件的時候報這個錯誤,那麼我們需要生成ssh公鑰
ssh-keygen -t rsa -C"[email protected]"
查看當前公鑰,並且將公鑰添加到碼雲後台的ssh公鑰中
git branch --set-upstream-to=origin/碼雲本地分支 伺服器本地分支
eg:git branch --set-upstream-to=origin/master master
git config --global credential.helper store
到此、配置完成
『伍』 Github常見操作和常見錯誤!
一、如果輸入$ git remote add origin [email protected] :djqiang(github帳號名)/gitdemo(項目名).git
解決辦法如下:
1、先輸入$ git remote rm origin
2、再輸入$ git remote add origin [email protected] :djqiang/gitdemo.git 就不會報錯了!
3、如果輸入$ git remote rm origin 還是報錯的話,error: Could not remove config section 'remote.origin'. 我們需要修改gitconfig文件的內容
4、找到你的github的安裝路徑,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_\etc
5、找到一個名為gitconfig的文件,打開它把裡面的[remote "origin"]那一行刪掉就好了!
二、如果輸入$ ssh -T [email protected] 出現錯誤提示:Permission denied (publickey).因為新生成的key不能加入ssh就會導致連接不上github。
解決辦法如下:
1、先輸入$ ssh-agent,再輸入$ ssh-add ~/.ssh/id_key,這樣就可以了。
2、如果還是不行的話,輸入ssh-add ~/.ssh/id_key 命令後出現報錯Could not open a connection to your authentication agent.解決方法是key用Git Gui的ssh工具生成,這樣生成的時候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行來做。
3、最好檢查一下在你復制id_rsa.pub文件的內容時有沒有產生多餘的空格或空行,有些編輯器會幫你添加這些的。
三、如果輸入$ git push origin master 提示出錯信息:error:failed to push som refs to .......
解決辦法如下:
1、先輸入$ git pull origin master //先把遠程伺服器github上面的文件拉下來
2、再輸入$ git push origin master
3、如果出現報錯 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository. 4、則需要重新輸入$ git remote add origin [email protected] :djqiang/gitdemo.git
四、使用git在本地創建一個項目的過程
$ makdir ~/hello-world //創建一個項目hello-world
$ cd ~/hello-world //打開這個項目
$ git init //初始化
$ touch README
$ git add README //更新README文件
$ git commit -m 'first commit' //提交更新,並注釋信息「first commit」
$ git remote add origin [email protected] :defnngj/hello-world.git //連接遠程github項目
$ git push -u origin master //將本地項目更新到github項目上去
五、gitconfig配置文件
Git有一個工具被稱為git config,它允許你獲得和設置配置變數;
這些變數可以控制Git的外觀和操作的各個方面。
這些變數可以被存儲在三個不同的位置:
1./etc/gitconfig 文件:包含了適用於系統所有用戶和所有庫的值。如果你傳遞參數選項』--system』 給 git config,它將明確的讀和寫這個文件。
2.~/.gitconfig 文件 :具體到你的用戶。你可以通過傳遞--global 選項使Git 讀或寫這個特定的文件。
3.位於git目錄的config文件 (也就是 .git/config) :無論你當前在用的庫是什麼,特定指向該單一的庫。每個級別重寫前一個級別的值。因此,在.git/config中的值覆蓋了在/etc/gitconfig中的同一個值。 在Windows系統中,Git在$HOME目錄中查找.gitconfig文件(對大多數人來說,位於C:\Documents and Settings$USER下)。它也會查找/etc/gitconfig,盡管它是相對於Msys 根目錄的。這可能是你在Windows中運行安裝程序時決定安裝Git的任何地方。
4.1當你安裝Git後首先要做的事情是設置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:$ git config --global user.name "John Doe"$ git config --global user.email [email protected]
4.2 你的編輯器(Your Editor)現在,你的標識已經設置,你可以配置你的預設文本編輯器,Git在需要你輸入一些消息時會使用該文本編輯器。預設情況下,Git使用你的系統的預設編輯器,這通常可能是vi 或者 vim。如果你想使用一個不同的文本編輯器,例如Emacs,你可以做如下操作:$ git config --global core.editor emacs
4.3 檢查你的設置(Checking Your Settings)如果你想檢查你的設置,你可以使用 git config --list 命令來列出Git可以在該處找到的所有的設置:$ git config --list 你也可以查看Git認為的一個特定的關鍵字目前的值,使用如下命令 git config {key}:$ git config user.name
4.4 獲取幫助(Getting help)如果當你在使用Git時需要幫助,有三種方法可以獲得任何git命令的手冊頁(manpage)幫助信息:$ git help <verb>$ git <verb> --help$ man git-<verb>例如,你可以運行如下命令獲取對config命令的手冊頁幫助:$ git help config
六、push到github時,每次都要輸入用戶名和密碼的問題
在github.com上 建立了一個小項目,可是在每次push 的時候,都要輸入用戶名和密碼,很是麻煩 原因是使用了https方式 push 在termail里邊 輸入 git remote -v 可以看到形如一下的返回結果
origin https://github.com/dengVictor/learngit.git (fetch)
origin https://github.com/dengVictor/learngit.git (push)
下面把它換成ssh方式的。
七、常用命令
假如你現在新創建了一個項目,想把它提交到github上面? 假設你創建好了一個項目,並切換到項目的根目錄下面:
$ git status //查看當前項目下所有文的狀態,如果第一次,你會發現都紅顏色的,因為它還沒有交給git/github管理。
$ git add . //(.)點表示當前目錄下的所有內容,交給git管理,也就是提交到了git的本地倉庫。 Ps:git的強大之處就是有一個本地倉庫的概念,在沒有網路的情況下可以先將更新的內容提交到本地倉庫。
$ git commit –m」discription 」 //對你更新或修改了哪些內容做一個描述。
$ git remote add origin [email protected] :xiahouzuoxin/zx-libsvm.git // 如果你是第一次提交項目,這一句非常重要,這是你本地的當前的項目與遠程的哪個倉庫建立連接。 Ps: origin可以改為別人的名字,但是在你下一次push(提交)時,也要用你修改之後的名字。
$ git remote -v //查看你當前項目遠程連接的是哪個倉庫地址。
$ git push -u origin master //將本地的項目提交到遠程倉庫中。 ------------------------------------------------------------ 假如,你回到了家,想把公司提交的項目克隆到本地? 如果你是第一次想把github上面的項目克隆到本地或者要克隆別人的項目到地。
$ git clone [email protected] :xiahouzuoxin/zx-libsvm.git //在git下面切換到想存放此項目的文件目錄下,運行這條命令就可以將項目克隆下來。
假如本地已經存在了這個項目,而倉庫中又有一新的更新,如何把更的合並到本地的項目中?
$ git fetch origin //取得遠程更新,這里可以看做是准備要取了
$ git merge origin/master //把更新的內容合並到本地分支/master ------------------------------------------- 項目中刪除了一些文件,如何提交? 假如遠程倉庫中已經存了aaa這個文件,我fetch了下來,並刪除了aaa這個文件,想再push上到遠程倉庫中,並使遠程倉庫中的項目被新的修改覆蓋(也就是遠程倉庫中 的aaa也被刪除)
$ git status //可以看到我們刪除的哪些文件
$ git add . //刪除之後的文件提交git管理。
$ git rm src/com/hzh/hibernate//aaa.java //移除我們刪除的那個文件,不然git不允許我們往遠程倉庫提交。 Ps: 如果你想刪除的是某個目錄(java包),這里想移除整個目錄的內容。
$ git rm src/com/hzh/hibernate/bbb/ -r // -r 會把bbb/目錄下的所有內容一次性移動。 ------------------------------------------------------------------------ 遠程創建了一個新倉庫,本地創建了一個新項目,如何使新的項目與倉庫對應起來? 其實,這個也很簡單,只是我當時對那些命令不太理解,所以比較模糊,不知如何對應。
$ git remote add origin [email protected] :xiahouzuoxin/zx-libsvm.git //還是這個命令,在你push項目之前加上這一句就OK了。 [email protected] :xiahouzuoxin/zx-libsvm.git 就是你常見的新倉庫的地址啊。git切換到新項目下,在push之前,加上這一句,我們創建的新倉庫就與新項目建立了連接。
『陸』 在Linux下搭建Git伺服器
眾所周知,版本系統在開發環境中是必不可少的,但是我們可以把代碼免費的託管到GitHub上,如果我們不原意公開項目的源代碼,公司又不想付費使用,那麼我們可以自己搭建一台Git伺服器,可以用Gitosis來管理公鑰,還是比較方便的。
搭建環境:
伺服器 CentOS6.6 + git(version 1.8.3.1)
客戶端 Windows10 + git(version 2.11.1.windows.1)
1. 安裝Git相關軟體
Linux是伺服器端系統,Windows作為客戶端系統,分別安裝Git
安裝客戶端:
下載 Git for Windows,地址:https://git-for-windows.github.io/
安裝完之後,可以使用Git Bash作為命令行客戶端。
安裝Gitosis
出現下面的信息表示安裝成功了
2. 伺服器端創建git用戶來管理Git服務
3. 配置公鑰
在Windows上配置管理者,git伺服器需要一些管理者,通過上傳開發者機器的公鑰到伺服器,添加成為git伺服器的管理者,打開git命令行
4. 配置gitosis
使用git用戶並初始化gitosis
在Windows上機器上clone gitosis-admin到管理者主機
gitosis.conf: git伺服器配置文件
keydir: 存放客戶端公鑰
配置 gitosis.conf 文件
在Windows管理者機器上創建本地test倉庫,並上傳到git服務端
提交到遠程伺服器
服務端會自動創建test倉庫
5.添加其他git用戶開發者
由於公司開發團隊人數不斷增多,手動添加開發者私鑰到/home/git/.ssh/authorized_keys比較麻煩,通過上面的Windows機器的管理者統一收集其他開發者的私鑰id_rsa.pub文件,然後傳到伺服器上,配置好後,用戶即獲得項目許可權,可以從遠程倉庫拉取和推送項目,達到共同開發項目。
推送完成後,新加進來的開發者就可以進行項目的開發了,後續增加人員可以這樣添加進來,開發者直接把倉庫clone下來就可以了。