溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Git來管理Git服務器

發布時間:2021-12-10 14:21:11 來源:億速云 閱讀:165 作者:iii 欄目:互聯網科技

本篇內容主要講解“如何使用Git來管理Git服務器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用Git來管理Git服務器”吧!


安裝 Gitolite

假設你的 Git 服務器運行在 Linux 上,則可以使用包管理器安裝 Gitolite(在 CentOS 和 RHEL 上為 yum,在 Debian 和 Ubuntu 上為 apt,在 OpenSUSE 上為 zypper 等)。例如,在 RHEL 上:

$ sudo yum install gitolite3

許多發行版的存儲庫提供的仍是舊版本的 Gitolite,但最新版本為版本 3。

你必須具有對服務器的無密碼 SSH 訪問權限。如果愿意,你可以使用密碼登錄服務器,但是 Gitolite 依賴于 SSH  密鑰,因此必須配置使用密鑰登錄的選項。如果你不知道如何配置服務器以進行無密碼 SSH 訪問,請首先學習如何進行操作(Steve Ovens 的  Ansible 文章的設置 SSH 密鑰身份驗證部分對此進行了很好的說明)。這是加強服務器管理的安全以及運行 Gitolite 的重要組成部分。

配置 Git 用戶

如果沒有 Gitolite,則如果某人請求訪問你在服務器上托管的 Git 存儲庫時,則必須向該人提供用戶帳戶。Git 提供了一個特殊的外殼,即 git-shell,這是一個僅執行 Git 任務的特別的特定 shell。這可以讓你有個只能通過非常受限的 Shell 環境來過濾訪問你的服務器的用戶。

這個解決方案是一個辦法,但通常意味著用戶可以訪問服務器上的所有存儲庫,除非你具有用于組權限的良好模式,并在創建新存儲庫時嚴格遵循這些權限。這種方式還需要在系統級別進行大量手動配置,這通常是只有特定級別的系統管理員才能做的工作,而不一定是通常負責  Git 存儲庫的人員。

Gitolite 通過為需要訪問任何存儲庫的每個人指定一個用戶名來完全回避此問題。默認情況下,該用戶名是 git,并且由于 Gitolite 的文檔中假定使用的是它,因此在學習該工具時保留它是一個很好的默認設置。對于曾經使用過 GitLab 或 GitHub 或任何其他 Git 托管服務的人來說,這也是一個眾所周知的約定。

Gitolite 將此用戶稱為托管用戶。在服務器上創建一個帳戶以充當托管用戶(我習慣使用 git,因為這是慣例):

$ sudo adduser --create-home git

為了控制該 git 用戶帳戶,該帳戶必須具有屬于你的有效 SSH 公鑰。你應該已經進行了設置,因此復制你的公鑰(而不是你的私鑰)添加到 git 用戶的家目錄中:

$ sudo cp ~/.ssh/id_ed25519.pub /home/git/$ sudo chown git:git /home/git/id_ed25519.pub

如果你的公鑰不以擴展名 .pub 結尾,則 Gitolite 不會使用它,因此請相應地重命名該文件。切換為該用戶帳戶以運行 Gitolite 的安裝程序:

$ sudo su - git$ gitolite setup --pubkey id_ed25519.pub

安裝腳本運行后,git 的家用戶目錄將有一個 repository 目錄,該目錄(目前)包含存儲庫 git-admin.gittesting.git。這就是該服務器所需的全部設置,現在請登出 git 用戶。

使用 Gitolite

管理 Gitolite 就是編輯 Git 存儲庫中的文本文件,尤其是 gitolite-admin.git 中的。你不會通過 SSH 進入服務器來進行 Git 管理,并且 Gitolite 也建議你不要這樣嘗試。在 Gitolite 服務器上存儲你和你的用戶的存儲庫是個存儲庫,因此最好不要使用它們。

$ git clone git@example.com:gitolite-admin.git gitolite-admin.git$ cd gitolite-admin.git$ ls -1confkeydir

該存儲庫中的 conf 目錄包含一個名為 gitolite.conf 的文件。在文本編輯器中打開它,或使用 cat 查看其內容:

repo gitolite-admin    RW+     =   id_ed22519 repo testing    RW+     =   @all

你可能對該配置文件的功能有所了解:gitolite-admin 代表此存儲庫,并且 id_ed25519 密鑰的所有者具有讀取、寫入和管理 Git 的權限。換句話說,不是將用戶映射到普通的本地 Unix 用戶(因為所有用戶都使用 git 用戶托管用戶身份),而是將用戶映射到 keydir 目錄中列出的 SSH 密鑰。

testing.git 存儲庫使用特殊組符號為訪問服務器的每個人提供了全部權限。

添加用戶

如果要向 Git 服務器添加一個名為 alice 的用戶,Alice 必須向你發送她的 SSH 公鑰。Gitolite 使用文件名的 .pub  擴展名左邊的任何內容作為該 Git  用戶的標識符。不要使用默認的密鑰名稱值,而是給密鑰指定一個指示密鑰所有者的名稱。如果用戶有多個密鑰(例如,一個用于筆記本電腦,一個用于臺式機),則可以使用子目錄來避免文件名沖突。例如,Alice  在筆記本電腦上使用的密鑰可能是默認的 id_rsa.pub,因此將其重命名為alice.pub 或類似名稱(或讓用戶根據其計算機上的本地用戶帳戶來命名密鑰),然后將其放入 gitolite-admin.git/keydir/work/laptop/ 目錄中。如果她從她的桌面計算機發送了另一個密鑰,命名為 alice.pub(與上一個相同),然后將其添加到 keydir/home/desktop/ 中。另一個密鑰可能放到 keydir/home/desktop/ 中,依此類推。Gitolite 遞歸地在 keydir 中搜索與存儲庫“用戶”相匹配的 .pub 文件,并將所有匹配項視為相同的身份。

當你將密鑰添加到 keydir 目錄時,必須將它們提交回服務器。這是一件很容易忘記的事情,這里有一個使用自動化的 Git 應用程序(例如 Sparkleshare)的真正的理由,因此任何更改都將立即提交給你的 Gitolite 管理員。第一次忘記提交和推送,在浪費了三個小時的你和你的用戶的故障排除時間之后,你會發現 Gitolite 是使用 Sparkleshare 的完美理由。

$ git add keydir$ git commit -m 'added alice-laptop-0.pub'$ git push origin HEAD

默認情況下,Alice 可以訪問 testing.git 目錄,因此她可以使用該目錄測試連接性和功能。

設置權限

與用戶一樣,目錄權限和組也是從你可能習慣的的常規 Unix 工具中抽象出來的(或可從在線信息查找)。在 gitolite-admin.git/conf 目錄中的 gitolite.conf 文件中授予對項目的權限。權限分為四個級別:

  • R 允許只讀。在存儲庫上具有 R 權限的用戶可以克隆它,僅此而已。

  • RW 允許用戶執行分支的快進推送、創建新分支和創建新標簽。對于大多數用戶來說,這個基本上就像是一個“普通”的 Git 存儲庫。

  • RW+ 允許可能具有破壞性的 Git 動作。用戶可以執行常規的快進推送、回滾推送、變基以及刪除分支和標簽。你可能想要或不希望將其授予項目中的所有貢獻者。

  • - 明確拒絕訪問存儲庫。這與未在存儲庫的配置中列出的用戶相同。

通過調整 gitolite.conf 來創建一個新的存儲庫或修改現有存儲庫的權限。例如,授予 Alice 權限來管理一個名為 widgets.git 的新存儲庫:

repo gitolite-admin    RW+     =   id_ed22519 repo testing    RW+     =   @all repo widgets    RW+     =   alice

現在,Alice(也僅有 Alice 一個人)可以克隆該存儲庫:

[alice]$ git clone git@example.com:widgets.gitCloning into 'widgets'...warning: You appear to have cloned an empty repository.

在第一次推送時,Alice 必須使用 -u 選項將其分支發送到空存儲庫(如同她在任何 Git 主機上做的一樣)。

為了簡化用戶管理,你可以定義存儲庫組:

@qtrepo = widgets@qtrepo = games repo gitolite-admin    RW+     =   id_ed22519 repo testing    RW+     =   @all repo @qtrepo    RW+     =   alice

正如你可以創建組存儲庫一樣,你也可以對用戶進行分組。默認情況下存在一個用戶組:@all。如你所料,它包括所有用戶,無一例外。你也可以創建自己的組:

@qtrepo = widgets@qtrepo = games @developers = alice bob repo gitolite-admin    RW+     =   id_ed22519 repo testing    RW+     =   @all repo @qtrepo    RW+     =   @developers

與添加或修改密鑰文件一樣,對 gitolite.conf 文件的任何更改都必須提交并推送以生效。

創建存儲庫

默認情況下,Gitolite 假設存儲庫的創建是從上至下進行。例如,有權訪問 Git 服務器的項目經理創建了一個項目存儲庫,并通過 Gitolite 管理倉庫添加了開發人員。

實際上,你可能更愿意向用戶授予創建存儲庫的權限。Gitolite 稱這些為“野生倉庫(通配倉庫)wild repos”(我不確定這是關于倉庫的形成方式的描述,還是指配置文件所需的通配符)。這是一個例子:

@managers = alice bob repo foo/CREATOR/[a-z]..*    C   =   @managers    RW+ =   CREATOR    RW  =   WRITERS    R   =   READERS

第一行定義了一組用戶:該組稱為 @managers,其中包含用戶 alicebob。下一行設置了通配符允許創建尚不存在的存儲庫,放在名為 foo 的目錄下的創建該存儲庫的用戶名的子目錄中。例如:

[alice]$ git clone git@example.com:foo/alice/cool-app.gitCloning into cool-app'...Initialized empty Git repository in /home/git/repositories/foo/alice/cool-app.gitwarning: You appear to have cloned an empty repository.

野生倉庫的創建者可以使用一些機制來定義誰可以讀取和寫入其存儲庫,但是他們是有范圍限定的。在大多數情況下,Gitolite 假定由一組特定的用戶來管理項目權限。一種解決方案是使用 Git 掛鉤來授予所有用戶對 gitolite-admin 的訪問權限,以要求管理者批準將更改合并到 master 分支中。

到此,相信大家對“如何使用Git來管理Git服務器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

git
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女