欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

搭建Git本地服務器及其使用方法詳解

 更新時間:2023年08月31日 16:25:32   作者:大鵬的NLP博客  
GitHub是一個免費托管開源代碼的遠程倉庫,但當我們既不想公開源代碼,又舍不得給GitHub交保護費時,就需要自己搭建一臺Git服務器作為私有倉庫使用了,下面我們就來看看具體實現方法吧

搭建Git服務器

GitHub就是一個免費托管開源代碼的遠程倉庫。但是對于某些視源代碼如生命的商業(yè)公司來說,既不想公開源代碼,又舍不得給GitHub交保護費,那就只能自己搭建一臺Git服務器作為私有倉庫使用。

搭建Git服務器需要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的apt命令就可以完成安裝。假設你已經有sudo權限的用戶賬號,下面,正式開始安裝。

第一步,安裝git:

$ sudo apt-get install git

第二步,創(chuàng)建一個gituser用戶,用來運行git服務:

$ sudo adduser gituser

第三步,創(chuàng)建證書登錄:

su gituser
cd /home/gituser
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入到/home/gituser/.ssh/authorized_keys文件里,一行一個。

第四步,初始化Git倉庫:

一般來說git倉庫的名稱都是以.git結尾.先選定一個目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:

$ sudo git init --bare sample.git

Git就會創(chuàng)建一個裸倉庫,裸倉庫沒有工作區(qū),因為服務器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務器上去改工作區(qū),并且服務器上的Git倉庫通常都以.git結尾。然后,把owner改為gituser:

$ sudo chown -R gituser:gituser sample.git

第五步,禁用shell登錄:

出于安全考慮,第二步創(chuàng)建的gituser用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:

gituser:x:1001:1001:,,,:/home/gituser:/bin/bash

改為:

gituser:x:1001:1001:,,,:/home/gituser:/usr/bin/git-shell

注:這里“/usr/bin/git-shell”應該指的是git的二進制應用程序。

這樣,gituser用戶可以正常通過ssh使用git,但無法登錄shell,因為我們?yōu)間ituser用戶指定的git-shell每次一登錄就自動退出。

第六步,克隆遠程倉庫:

現在,可以通過git clone命令克隆遠程倉庫了,在各自的電腦上運行:沒有sudu

$ git clone gituser@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就簡單了。

提交代碼

git init   // 初始化版本庫
git add .   // 添加文件到版本庫(只是添加到緩存區(qū)),.代表添加文件夾下所有文件 
git commit -m "first commit" // 把添加的文件提交到版本庫,并填寫提交備注

到目前為止,我們完成了代碼庫的初始化,但代碼是在本地,還沒有提交到遠程服務器,所以關鍵的來了,要提交到就遠程代碼服務器,進行以下兩步:

git remote add origin 你的遠程庫地址  // 把本地庫與遠程庫關聯
git push -u origin master    // 第一次推送時
git push origin master  // 第一次推送后,直接使用該命令即可推送修改

把本地庫的內容推送到遠程。使用 git push命令,實際上是把當前分支master推送到遠程。執(zhí)行此命令后會要求輸入用戶名、密碼,驗證通過后即開始上傳。

說明:用戶名密碼需要通過命令 ssh-keygen -t rsa -C “xxxxxx@qq.com” 進行創(chuàng)建,并且要把得到的秘鑰(公鑰)文件放到git服務器上,這樣才有權限進行代碼推送

管理公鑰

如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/gituser/.ssh/authorized_keys文件里就是可行的。如果團隊有幾百號人,就沒法這么玩了,這時,可以用Gitosis來管理公鑰。

這里我們不介紹怎么玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。

管理權限

有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統里設置一套完善的權限控制,每個人是否有讀寫權限會精確到每個分支甚至每個目錄下。因為Git是為Linux源代碼托管而開發(fā)的,所以Git也繼承了開源社區(qū)的精神,不支持權限控制。不過,因為Git支持鉤子(hook),所以,可以在服務器端編寫一系列腳本來控制提交等操作,達到權限控制的目的。Gitolite就是這個工具。

這里我們也不介紹Gitolite了,不要把有限的生命浪費到權限斗爭中。

小結

• 要方便管理公鑰,用Gitosis;

• 要像SVN那樣變態(tài)地控制權限,用Gitolite。

在Git服務器上首先需要將/etc/ssh/sshd_config中將RSA認證打開:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

在/home/git下創(chuàng)建.ssh目錄,然后創(chuàng)建authorized_keys文件,把id_rsa.pub里面的內容復制到authorized_keys文件中

service sshd restart

嚴重警告:

1. 必須保證git用戶的根目錄的文件夾權限為 755

2. 必須保證git用戶的根目錄下的.ssh文件夾權限為 700

3. 必須保證git用戶的根目錄下的.ssh文件夾中的authorized_keys文件的權限為 600

切換分支

git chechout 分支名

git init,git init—bare的區(qū)別

在初始化遠程倉庫時最好使用 git --bare init 而不要使用:git init

如果使用了git init初始化,則遠程倉庫的目錄下,也包含work tree,當本地倉庫向遠程倉庫push時, 如果遠程倉庫正在push的分支上(如果當時不在push的分支,就沒有問題), 那么push后的結果不會反應在work tree上, 也即在遠程倉庫的目錄下對應的文件還是之前的內容,必須得使用git reset --hard才能看到push后的內容.

在初始化遠程倉庫最好使用下面命令來初始化:

git --bare init

而不要使用:

git init

“普通庫”指用"git init"命令創(chuàng)建的GIT庫;

“裸庫”指用"git init –bare"命令創(chuàng)建的GIT庫;

當你創(chuàng)建一個普通庫時,在工作目錄下,除了.git目錄之外,你還可以看到庫中所包含的所有源文件。你擁有了一個可以進行瀏覽和修改(add, commit, delete等)的本地庫。

當你創(chuàng)建一個裸庫時,在工作目錄下,只有一個.git目錄,而沒有類似于本地庫那樣的文件結構可供你直接進行瀏覽和修改。但是你仍舊可以用git show命令來進行瀏覽,舉個例子(參數為某個commit的SHA1值):

git show 921dc435a3acd46e48e3d1e54880da62dac18fe0

一般來說,一個裸庫往往被創(chuàng)建用于作為大家一起工作的共享庫,每一個人都可以往里面push自己的本地修改。一個慣用的命名方式是在庫名后加上.git,舉個例子:

# mkdir example.git
# cd example.git
# git init --bare .

這樣你便擁有了一個叫做example的共享庫。在你自己的本地機器上,你可以用git remote add命令做初始化check-in:

// assume there’re some initial files you want to push to the bare repo you just created,// which are placed under example directory

# cd example
# git init
# git add *
# git commit -m "My initial commit message"
# git remote add origin git@example.com:example.git
# git push -u origin master

項目團隊里面的每個人都可以clone這個庫,然后完成本地修改之后,往這個庫中push自己的代碼。

git clone git@example.com:example.git
cd example
git push origin <local_branch_name>:<remote_branch_name>

git刪除遠程文件夾或文件的方法如下,我把src里的全部移除,但是本地文件還保留。

git rm -r -n --cached */src/* //-n:加上這個參數,執(zhí)行命令時,是不會刪除任何文件,而是展示此命令要刪除的文件列表預覽。

git rm -r --cached */src/* //最終執(zhí)行命令.

git commit -m"移除src目錄下所有文件的版本控制" //提交

git push origin master //提交到遠程服務器

git裸倉庫設置默認分支

刪除一個遠程分支時出現錯誤提示:

$ git push --delete origin foobar

也就是foobar是遠程倉庫的當前分支(由于使用git clone --bare生成裸倉庫造成的),因為遠程倉庫是裸倉庫,所以不能使用普通的git checkout命令切換分支。在裸倉庫中使用如下命令來切換當前分支:

$ git symbolic-ref HEAD refs/heads/devel

這樣就將裸倉庫的當前分支切換為devel分支,刪除foobar分支就沒問題了。

$ git push origin :foobar

這個命令實質上是修改了.git/HEAD文件,使其內容為:

ref: refs/heads/devel

fatal: 不是一個有效的對象名:‘master’。

需要初始化倉庫了之后需要你向里面添加文件并提交,這是才可以用:git branch命令查詢到有master分支;

git pull錯誤:refusing to merge unrelated histories

問題場景重現:

我在本地建了個項目,在github新建了項目?,F在想把本地項目推送到github新建項目上。

給本地項目添加遠程項目倉庫地址:git remote add origin url

拉取遠程項目代碼:git pull origin master. 報錯"refusing to merge unrelated histories"

重新拉取:git pull --allow-unrelated-histories origin master,成功

原因:本地項目和托管項目是完全兩個不通的項目

! [已拒絕] master -> master (非快進)

可以這樣解決,強制更新:

git pull -f origin dev:dev

我每天使用 Git ,但是很多命令記不住。

一般來說,日常使用只要記住下圖6個命令,就可以了。但是熟練使用,恐怕要記住60~100個命令。

下面是我整理的常用 Git 命令清單。幾個專用名詞的譯名如下。

•Workspace:工作區(qū)

•Index / Stage:暫存區(qū)

•Repository:倉庫區(qū)(或本地倉庫)

•Remote:遠程倉庫

git commit 主要是將暫存區(qū)里的改動給提交到本地的版本庫

增加/刪除文件

添加指定文件到暫存區(qū)

$ git add [file1] [file2] …

添加指定目錄到暫存區(qū),包括子目錄

$ git add [dir]

添加當前目錄的所有文件到暫存區(qū)

$ git add .

添加每個變化前,都會要求確認 對于同一個文件的多處變化,可以實現分次提交

$ git add -p

刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)

$ git rm [file1] [file2] …

停止追蹤指定文件,但該文件會保留在工作區(qū)

$ git rm --cached [file]

改名文件,并且將這個改名放入暫存區(qū)

$ git mv [file-original] [file-renamed]

代碼提交# 提交暫存區(qū)到倉庫區(qū)

$ git commit -m [message]

提交暫存區(qū)的指定文件到倉庫區(qū)

$ git commit [file1] [file2] … -m [message]

提交工作區(qū)自上次commit之后的變化,直接到倉庫區(qū)

$ git commit -a

提交時顯示所有diff信息

$ git commit -v

使用一次新的commit,替代上一次提交 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息

$ git commit --amend -m [message]

重做上一次commit,并包括指定文件的新變化

$ git commit --amend [file1] [file2] …

此后一般步驟:

sudo git init --bare GenerationDetection.git

sudo chown chatbot:chatbot GenerationDetection.git/

到此這篇關于搭建Git本地服務器及其使用方法詳解的文章就介紹到這了,更多相關搭建Git服務器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • CentOS下搭建SVN服務器的步驟詳解

    CentOS下搭建SVN服務器的步驟詳解

    這篇文章主要介紹了CentOS下搭建SVN服務器的步驟,較為詳細的分析了CentOS平臺上搭建SVN服務器的步驟與相關操作注意事項,需要的朋友可以參考下
    2016-10-10
  • 采用軟件負載均衡器實現web服務器集群(iis+nginx)

    采用軟件負載均衡器實現web服務器集群(iis+nginx)

    我用nginx實現網站負載均衡測試的例子,windows下IIS做負載實測
    2016-04-04
  • ssh服務器拒絕了密碼 請再試一次已解決(親測有效)

    ssh服務器拒絕了密碼 請再試一次已解決(親測有效)

    這篇文章主要介紹了解決ssh服務器拒絕了密碼 請再試一次的問題,本文通過兩種方法給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 新安裝的XAMPP訪問phpmyadmin出錯的解決方法

    新安裝的XAMPP訪問phpmyadmin出錯的解決方法

    這篇文章主要介紹了新安裝的XAMPP訪問phpmyadmin出錯的解決方法,錯誤提示為服務器沒有響應(或本地服務器的套接字沒有正確配置),需要的朋友可以參考下
    2014-11-11
  • 獨立IP與共享IP的區(qū)別

    獨立IP與共享IP的區(qū)別

    做網站選擇獨立IP還是共享IP?相信很多站長都在此糾結過,自己不使用服務器的時候從來沒有關心過獨立IP和共享IP的究竟有什么具體的差別。但當自己真正用到的時候,才發(fā)現:同樣都是IP,差別不是一般的大,獨立IP的強悍,不用的人是沒有辦法體會的
    2015-12-12
  • 微服務架構之服務注冊與發(fā)現實踐示例詳解

    微服務架構之服務注冊與發(fā)現實踐示例詳解

    這篇文章主要為大家介紹了微服務架構之服務注冊與發(fā)現實踐的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-01-01
  • Linux下Web性能壓力測試工具http_load使用教程

    Linux下Web性能壓力測試工具http_load使用教程

    http_load基于linux平臺的一種性能測工具。以并行復用的方式運行,用以測試web服務器的吞吐量與負載,測試web頁面的性能。
    2014-11-11
  • Linux 系統下搭建 Gitlab 服務器的過程分析

    Linux 系統下搭建 Gitlab 服務器的過程分析

    這篇文章主要介紹了Linux 系統下搭建 Gitlab 服務器的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 服務器從安裝到配置陣列RAID1+RAID5?安裝Windows?Server?2019

    服務器從安裝到配置陣列RAID1+RAID5?安裝Windows?Server?2019

    今天就給安排上了——從RAID的配置開始,以及如何在WinPE里面載入陣列卡驅動、磁盤分區(qū)、安裝系統等,另外 ,圖片為操作過程中實拍,質量不高,敬請諒解
    2022-10-10
  • https協議詳解

    https協議詳解

    HTTPS并不是一種新技術,它是在HTTP協議的基礎上來進行更嚴格的加密。這篇文章主要介紹了https協議詳解的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論