git如何搭建倉庫伺服器
1. 如何在伺服器新建git 代碼倉庫
git
pull
如果pull時提示「You
asked
me
to
pull
without
telling
me
whichbranch
you
want
to
merge
with」,
說明本地有新建分支且已同步到伺服器上,當從伺服器下載代碼時需要在本地config中配置該分支的merge信息。
配置時可以參考下面的例子:
$
git
config
branch.master.remote
origin
//master是分支名,origin是遠程倉庫名
$
git
config
branch.master.merge
refs/heads/master!
2. 如何搭建git私有倉庫
以ubuntu伺服器為例,如果要創建小范圍的私有git伺服器,是非常簡單的,只需要如下幾個簡單步驟:
Step 1: 安裝git
直接通過sudo apt-get install git即可完成。
Step 2: 創建git用戶
git用戶用來通過SSH連接git服務,輸入命令:
$ sudo adser git
Step 3: 創建證書登錄
首先收集所有需要登錄的用戶公鑰,然後導入到/home/git/.ssh/authorized_keys文件即可。
Step 4: 初始化git倉庫
假設倉庫位於/srv/sample.git,在/srv目錄下輸入命令:
$ sudo git init --bare sample.git
這樣就創建了一個裸倉庫,裸倉庫沒有working dir,因為伺服器上的git倉庫純粹是為了共享,倉庫目錄一般以.git結尾。然後把owner改為git:
$ sudo chown -R git:git sample.git
Step 5: 防止登錄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。
Step 6: 克隆倉庫
在客戶端就可以通過ssh克隆倉庫了:
$ git clone git@server:/srv/sample.gitCloning into 'sample'...warning: You appear to have cloned an empty repository.
然後,就可以正常推送了:
$ touch README$ git add README$ git commit -m "add readme"$ git push origin masterCounting objects: 3, done.Writing objects: 100% (3/3), 212 bytes, done.Total 3 (delta 0), reused 0 (delta 0)To git@ubuntu:/srv/sample.git
* [new branch] master -> master
3. Git創建本地倉庫
打開sourcetree,點擊菜單欄的 「 Create 」按鈕;然後點擊下面的「 瀏覽 」按鈕,選擇指定的位置(文件夾);最後點擊下面的「 創建 」按鈕,其他不需要修改,創建完成。
①、創建完成之後,點擊屏幕中間的「 在文件資源管理器中打開 」按鈕,新建一個test.txt文件,編輯內容,隨便寫點什麼東西都可以,寫完保存一下。
②、返回sourcetree,可以看到未暫存文件區域多了一個test.txt文件,選中text.txt文件,點擊「 暫存所選 」按鈕,文件就會暫存到已暫存文件區域。
③、選中test.txt文件,右鍵-提交,然後在最下面寫上備注或者描述,這里的備注可寫可不寫,最後點擊「 提交 」按鈕。
④、提交成功後默認生成master分支
點擊sourcetree右上角的「 命令行模式 」按鈕,進入命令行。
·查看當前所在目錄。
·進入上一級目錄。
·創建一個demo2 倉庫(文件夾)。
·進入demo2文件夾。
·初始化倉庫。
·查看所有文件包括隱藏文件,如果有.git/文件則表示初始化成功。
·創建一個test.txt文件並寫入內容,
·查看test.txt文件的內容。
·將test.txt文件添加到暫存區。
·將暫存區的test.txt文件上傳到本地倉庫並添加備注。
到這里通過git命令行創建倉庫已經完成。
以上內容來著視頻: https://www.imooc.com/video/17966
下一章: 創建遠程倉庫
4. linux如何搭建git
1、環境准備
伺服器:CentOS 7.3 + git (1.8.3.1)
客戶端:win10 + git (2.17.0.windows.1)
2、伺服器安裝git
yum install -y git
3、創建git用戶,管理 git服務
[root@localhost home]# useradd git
[root@localhost home]# passwd git
4、伺服器創建git 倉庫
設置/home/git/repository-git 為git 伺服器倉庫,然後把 git 倉庫的 owner 修改為 git 用戶。
復制代碼
[root@localhost git]# mkdir repository-git
[root@localhost git]# git init --bare repository-git/
Initialized empty Git repository in /home/git/repository-gt/
[root@localhost git]# chown -R git:git repository-git/
5、客戶端安裝git
下載 Git for Windows,地址:https://git-for-windows.github.io/
安裝完之後,可以使用 Git Bash 作為命令行客戶端。
5.1、選擇一個目錄 F:\project\sell 作為本地倉庫,右鍵進入Git Bash 命令行模式
初始化本地倉庫:git init
5.2、嘗試克隆一個伺服器的空倉庫到本地倉庫
git clone [email protected]:/home/git/repository-gt
第一次連接到目標 Git 伺服器時會得到一個提示:
The authenticity of host '192.168.116.129(192.168.116.129)' can't be established.
RSA key fingerprint is SHA256:Ve6WV/.
Are you sure you want to continue connecting (yes/no)?
選擇 yes:
Warning: Permanently added '192.168.116.129' (RSA) to the list of known hosts.
此時 C:\Users\用戶名\.ssh 下會多出一個文件 known_hosts,以後在這台電腦上再次連接目標 Git 伺服器時不會再提示上面的語句。
5. 如何使用git創建遠程倉庫
工具:
git
終端
方法:
1、第一步要創建遠程倉庫讓別人連接。需要打開遠程連接。找到系統偏好設置。找到花紅圈的共享按鈕,點擊。
7、另一台機器上驗證一下,打開終端,輸入git clone origin ssh://192.168.100.103/~/jj/.git即可。我的遠程倉庫是origin你們的是啥,自己更改。
按回車後出現
Cloning into jj...
證明成功了。
6. 怎麼在自己的伺服器上建立git倉庫
1.架設Git伺服器我們以Ubuntu為例。首先,在git伺服器上創建一個名為'git'的用戶,並為其創建一個.ssh目錄。並將其許可權設置為僅git用戶有讀寫許可權$sudoadsergit$sugit$cd$mkdir.ssh$chmod700.ssh接下來,把開發者的SSH公鑰添加到這個用戶的authorized_keys文件中。假設你通過電郵收到了幾個公鑰並存到了臨時文件里。重復一下,公鑰大致看起來是這個樣子:$cat/tmp/id_rsa.john.pubssh-/ww+/T17//5zytK6Ztg3RPKK+/nLF6JLtPofwFBlgc+AYYgPqdAv8JggJICUvax2T9va5gsg-keypair只要把它們逐個追加到authorized_keys文件尾部即可,同時將authorized_keys設置為僅git用戶有讀寫許可權。$cat/tmp/id_rsa.john.pub>>~/.ssh/authorized_keys$cat/tmp/id_rsa.josie.pub>>~/.ssh/authorized_keys$cat/tmp/id_rsa.jessica.pub>>~/.ssh/authorized_keys$chmod600~/.ssh/authorized_keys現在可以用--bare選項運行gitinit來建立一個裸倉庫,這會初始化一個不包含工作目錄的倉庫。$cd/opt/git$mkdirproject.git$cdproject.git$git--bareinit這時,Join,Josie或者Jessica就可以把它加為遠程倉庫,推送一個分支,從而把第一個版本的項目文件上傳到倉庫里了。值得注意的是,每次添加一個新項目都需要通過shell登入主機並創建一個裸倉庫目錄。我們不妨以gitserver作為git用戶及項目倉庫所在的主機名。如果在網路內部運行該主機,並在DNS中設定gitserver指向該主機,那麼以下這些命令都是可用的:#在John的電腦上$cdmyproject$gitinit$gitadd.$gitcommit-m'initialcommit'$gitremoteaddorigingit@gitserver:/opt/git/project.git$gitpushoriginmaster這樣,其他人的克隆和推送也一樣變得很簡單:$gitclonegit@gitserver:/opt/git/project.git$vimREADME$gitcommit-am'fixfortheREADMEfile'$gitpushoriginmaster用這個方法可以很快捷地為少數幾個開發者架設一個可讀寫的Git服務。作為一個額外的防範措施,你可以用Git自帶的git-shell工具限制git用戶的活動范圍。只要把它設為git用戶登入的shell,那麼該用戶就無法使用普通的bash或者csh什麼的shell程序。編輯/etc/passwd文件:$sudovim/etc/passwd在文件末尾,你應該能找到類似這樣的行:git:x:1000:1000::/home/git:/bin/sh把bin/sh改為/usr/bin/git-shell(或者用whichgit-shell查看它的實際安裝路徑)。該行修改後的樣子如下:git:x:1000:1000::/home/git:/usr/bin/git-shell現在git用戶只能用SSH連接來推送和獲取Git倉庫,而不能直接使用主機shell。嘗試普通SSH登錄的話,會看到下面這樣的拒絕信息:$sshgit@gitserverfatal:WhatdoyouthinkIam?Ashell?Connectiontogitserverclosed.這里提供的方法,組內所有成員對project都有讀寫許可權,也就是說每個分支都可以push代碼,如果需要更加細致的許可權控制,請使用Gitosis或者Gitolite。2.搭建Gitweb安裝gitweb之後就可以通過網站訪問我們的項目了。就像gitweb.conf#pathtogitprojects(.git)$projectroot="/opt/git";至此gitweb就可以使用了,現在可以通過config[core]repositoryformatversion=0filemode=truebare=true[hooks]mailinglist="[email protected],[email protected]"#收件人列表[email protected]#送件人地址emailprefix="[Projectcommit]"#郵件標題前綴showrev="gitshow-C%s;echo"#不只顯示有變化的文件,同時也顯示改變的內容為了使郵件顯示的更清楚,還要修改一下工程目錄當中的description文件,在description文件中,默認第一行是項目名稱,所以要在第一行填入該項目的名稱,這個在郵件中會有顯示。$vim/opt/git/project.git/descriptionProject_A
7. 如何搭建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
這篇是詳細介紹Git的,中間有一部分是怎麼去搭建,你可以看下
8. 搭建git伺服器需要什麼樣的配置
搭建Git伺服器需要准備一台運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。
假設你已經有sudo許可權的用戶賬號,下面,正式開始安裝。
第一步,安裝git:
$ sudo apt-get install git
第二步,創建一個git用戶,用來運行git服務:
$ sudo adser git
第三步,創建證書登錄:
收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入到/home/git/.ssh/authorized_keys文件里,一行一個。
第四步,初始化Git倉庫:
先選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:
$ sudo git init --bare sample.git
Git就會創建一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到伺服器上去改工作區,並且伺服器上的Git倉庫通常都以.git結尾。然後,把owner改為git:
$ sudo chown -R git:git sample.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 clone命令克隆遠程倉庫了,在各自的電腦上運行:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就簡單了。
管理公鑰
如果團隊很小,把每個人的公鑰收集起來放到伺服器的/home/git/.ssh/authorized_keys文件里就是可行的。如果團隊有幾百號人,就沒法這么玩了,這時,可以用Gitosis來管理公鑰。
這里我們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。
管理許可權
有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統里設置一套完善的許可權控制,每個人是否有讀寫許可權會精確到每個分支甚至每個目錄下。因為Git是為Linux源代碼託管而開發的,所以Git也繼承了開源社區的精神,不支持許可權控制。不過,因為Git支持鉤子(hook),所以,可以在伺服器端編寫一系列腳本來控制提交等操作,達到許可權控制的目的。Gitolite就是這個工具。
9. git倉庫的創建及基本操作
一、安裝git
二、設置
由於git是分布式管理工具,需要輸入用戶名和郵箱以作為標識,因此,在命令行輸入下列的命令:git config -- global user.name "" ,git config -- global user.eamil ""
三、工作原理:
1.git的工作流程
2、git簡化原理
四、基本用法
1、創建版本庫
版本庫就是我們所說的「倉庫」,英文名repository,你可以理解為一個目錄,這個目錄裡面的所有文件都可以被Git管理,文件的修改,刪除Git都能跟蹤,
以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件」還原」。
eg:
命令解析:
cd:進入某個目錄
mkdir:創建一個文件
pwd:顯示當前的目錄路徑
2、添加文件到版本庫
添加文件到版本庫,首先需將這個目錄變為git可以管理的倉庫,命令如下:
git init
git add 001.txt
git commit 001.txt "001txt文件提交"
命令解析:
git add:將文件提交到暫存區
git commit -m:將暫存區文件提交到倉庫(單引號內為注釋)
3、檢查是否有未提交的文件
通過下面的命令,檢查該版本庫是否有文件未提交:git status 檢查當前文件狀態
4、檢查文件是否被修改 git diff:查看文件修改的內容
5、查看歷史變更記錄
git log:獲得歷史修改記錄
git log --pretty=oneline:使記錄只顯示主要的內容,一行顯示
6、版本回退
cat:查看文件內容
git reset --hard HEAD^:回退到上一個版本
git reflog:獲取歷史版本號
git reset --hard 版本號:回退到該版本號對應的版本
五、將本地文件推送到github倉庫
PS補充下:關於Git和github關聯
1、擁有github賬號
由於本地倉庫和遠程的github倉庫需要關聯,首先需要登錄github,注冊一個賬號,然後建立一個倉庫。
注冊鏈接: https://github.com/join?source=header-home 成功注冊後,登錄github,首頁如下:
2、創建SSH Key
Git和github之間是通過SSH加密的,因此需要執行下面的操作:
①、在本地主目錄查找,是否有.ssh目錄,如果有,打開該目錄,一般會有這兩個文件:id_rsa和id_rsa.pub,如果有的話,直接跳過,如果沒有的話,打開命令行,輸入如下命令:
ssh-keygen -t rsa –C 「[email protected]」(你自己的郵箱地址,推薦和注冊github的郵箱保持一致)
ps:Mac系統下查看和生成SSH Key
一、查看本地是否存在SSH-Key: ls -al ~/.ssh
輸出的是如下內容: 證明本地已經存在SSH Key 文件,請執行第四步。
id_rsa id_rsa.pub
二、如果沒有,生成新的SSH Key
ssh-keygen -t rsa -C"you_email" (your_email:這里填寫你在GitLab或者GitHub注冊時的郵箱。)
三、生成並添加SSH Key
ssh-add ~/.ssh/id_rsa
四、查看SSH Key
cat /Users/xxx/.ssh/id_rsa.pub
xxx是你的電腦用戶名,例如:howieMacBook-Pro:~ howie$中的howie關鍵字。
復制生成好的SSH Key 添加到 GitLab 或者GitHub中的SSH Key中即可。
②、登錄github,右上角:設置→settings-SSH and GPR keys→New SSH key,然後輸入你的標題,輸入上面的公鑰,然後點擊保存。
3、創建倉庫
點擊右上角,添加→New repository,按照下圖所示創建倉庫:
然後進入創建的倉庫,點擊Clone or download,找到你的倉庫地址:
然後通過命令:git remote add origin https://github.com/用戶名/倉庫名.git,將本地倉庫和github倉庫連接就好了。