自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用Git來(lái)管理Git服務(wù)器

開源
借助 Gitolite,你可以使用 Git 來(lái)管理 Git 服務(wù)器。在我們的系列文章中了解這些鮮為人知的 Git 用途。

[[313385]]

借助 Gitolite,你可以使用 Git 來(lái)管理 Git 服務(wù)器。在我們的系列文章中了解這些鮮為人知的 Git 用途。

正如我在系列文章中演示的那樣,Git 除了跟蹤源代碼外,還可以做很多事情。信不信由你,Git 甚至可以管理你的 Git 服務(wù)器,因此你可以或多或少地使用 Git 本身來(lái)運(yùn)行 Git 服務(wù)器。

當(dāng)然,這涉及除日常使用 Git 之外的許多組件,其中最重要的是 Gitolite,該后端應(yīng)用程序可以管理你使用 Git 的每個(gè)細(xì)微的配置。Gitolite 的優(yōu)點(diǎn)在于,由于它使用 Git 作為其前端接口,因此很容易將 Git 服務(wù)器管理集成到其他基于 Git 的工作流中。Gitolite 可以精確控制誰(shuí)可以訪問(wèn)你服務(wù)器上的特定存儲(chǔ)庫(kù)以及他們具有哪些權(quán)限。你可以使用常規(guī)的 Linux 系統(tǒng)工具自行管理此類事務(wù),但是如果有好幾個(gè)用戶和不止一兩個(gè)倉(cāng)庫(kù),則需要大量的工作。

Gitolite 的開發(fā)人員做了艱苦的工作,使你可以輕松地為許多用戶提供對(duì)你的 Git 服務(wù)器的訪問(wèn)權(quán),而又不讓他們?cè)L問(wèn)你的整個(gè)環(huán)境 —— 而這一切,你可以使用 Git 來(lái)完成全部工作。

Gitolite 并不是圖形化的管理員和用戶面板。優(yōu)秀的 Gitea 項(xiàng)目可提供這種體驗(yàn),但是本文重點(diǎn)介紹 Gitolite 的簡(jiǎn)單優(yōu)雅和令人舒適的熟悉感。

安裝 Gitolite

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

  1. $ sudo yum install gitolite3

許多發(fā)行版的存儲(chǔ)庫(kù)提供的仍是舊版本的 Gitolite,但最新版本為版本 3。

你必須具有對(duì)服務(wù)器的無(wú)密碼 SSH 訪問(wèn)權(quán)限。如果愿意,你可以使用密碼登錄服務(wù)器,但是 Gitolite 依賴于 SSH 密鑰,因此必須配置使用密鑰登錄的選項(xiàng)。如果你不知道如何配置服務(wù)器以進(jìn)行無(wú)密碼 SSH 訪問(wèn),請(qǐng)首先學(xué)習(xí)如何進(jìn)行操作(Steve Ovens 的 Ansible 文章的設(shè)置 SSH 密鑰身份驗(yàn)證部分對(duì)此進(jìn)行了很好的說(shuō)明)。這是加強(qiáng)服務(wù)器管理的安全以及運(yùn)行 Gitolite 的重要組成部分。

配置 Git 用戶

如果沒有 Gitolite,則如果某人請(qǐng)求訪問(wèn)你在服務(wù)器上托管的 Git 存儲(chǔ)庫(kù)時(shí),則必須向該人提供用戶帳戶。Git 提供了一個(gè)特殊的外殼,即 git-shell,這是一個(gè)僅執(zhí)行 Git 任務(wù)的特別的特定 shell。這可以讓你有個(gè)只能通過(guò)非常受限的 Shell 環(huán)境來(lái)過(guò)濾訪問(wèn)你的服務(wù)器的用戶。

這個(gè)解決方案是一個(gè)辦法,但通常意味著用戶可以訪問(wèn)服務(wù)器上的所有存儲(chǔ)庫(kù),除非你具有用于組權(quán)限的良好模式,并在創(chuàng)建新存儲(chǔ)庫(kù)時(shí)嚴(yán)格遵循這些權(quán)限。這種方式還需要在系統(tǒng)級(jí)別進(jìn)行大量手動(dòng)配置,這通常是只有特定級(jí)別的系統(tǒng)管理員才能做的工作,而不一定是通常負(fù)責(zé) Git 存儲(chǔ)庫(kù)的人員。

Gitolite 通過(guò)為需要訪問(wèn)任何存儲(chǔ)庫(kù)的每個(gè)人指定一個(gè)用戶名來(lái)完全回避此問(wèn)題。默認(rèn)情況下,該用戶名是 git,并且由于 Gitolite 的文檔中假定使用的是它,因此在學(xué)習(xí)該工具時(shí)保留它是一個(gè)很好的默認(rèn)設(shè)置。對(duì)于曾經(jīng)使用過(guò) GitLab 或 GitHub 或任何其他 Git 托管服務(wù)的人來(lái)說(shuō),這也是一個(gè)眾所周知的約定。

Gitolite 將此用戶稱為托管用戶。在服務(wù)器上創(chuàng)建一個(gè)帳戶以充當(dāng)托管用戶(我習(xí)慣使用 git,因?yàn)檫@是慣例):

  1. $ sudo adduser --create-home git

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

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

如果你的公鑰不以擴(kuò)展名 .pub 結(jié)尾,則 Gitolite 不會(huì)使用它,因此請(qǐng)相應(yīng)地重命名該文件。切換為該用戶帳戶以運(yùn)行 Gitolite 的安裝程序:

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

安裝腳本運(yùn)行后,git 的家用戶目錄將有一個(gè) repository 目錄,該目錄(目前)包含存儲(chǔ)庫(kù) git-admin.gittesting.git。這就是該服務(wù)器所需的全部設(shè)置,現(xiàn)在請(qǐng)登出 git 用戶。

使用 Gitolite

管理 Gitolite 就是編輯 Git 存儲(chǔ)庫(kù)中的文本文件,尤其是 gitolite-admin.git 中的。你不會(huì)通過(guò) SSH 進(jìn)入服務(wù)器來(lái)進(jìn)行 Git 管理,并且 Gitolite 也建議你不要這樣嘗試。在 Gitolite 服務(wù)器上存儲(chǔ)你和你的用戶的存儲(chǔ)庫(kù)是個(gè)存儲(chǔ)庫(kù),因此最好不要使用它們。

  1. $ git clone git@example.com:gitolite-admin.git gitolite-admin.git
  2. $ cd gitolite-admin.git
  3. $ ls -1
  4. conf
  5. keydir

該存儲(chǔ)庫(kù)中的 conf 目錄包含一個(gè)名為 gitolite.conf 的文件。在文本編輯器中打開它,或使用 cat 查看其內(nèi)容:

  1. repo gitolite-admin
  2. RW+ = id_ed22519
  3.  
  4. repo testing
  5. RW+ = @all

你可能對(duì)該配置文件的功能有所了解:gitolite-admin 代表此存儲(chǔ)庫(kù),并且 id_ed25519 密鑰的所有者具有讀取、寫入和管理 Git 的權(quán)限。換句話說(shuō),不是將用戶映射到普通的本地 Unix 用戶(因?yàn)樗杏脩舳际褂?git 用戶托管用戶身份),而是將用戶映射到 keydir 目錄中列出的 SSH 密鑰。

testing.git 存儲(chǔ)庫(kù)使用特殊組符號(hào)為訪問(wèn)服務(wù)器的每個(gè)人提供了全部權(quán)限。

添加用戶

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

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

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

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

設(shè)置權(quán)限

與用戶一樣,目錄權(quán)限和組也是從你可能習(xí)慣的的常規(guī) Unix 工具中抽象出來(lái)的(或可從在線信息查找)。在 gitolite-admin.git/conf 目錄中的 gitolite.conf 文件中授予對(duì)項(xiàng)目的權(quán)限。權(quán)限分為四個(gè)級(jí)別:

  • R 允許只讀。在存儲(chǔ)庫(kù)上具有 R 權(quán)限的用戶可以克隆它,僅此而已。
  • RW 允許用戶執(zhí)行分支的快進(jìn)推送、創(chuàng)建新分支和創(chuàng)建新標(biāo)簽。對(duì)于大多數(shù)用戶來(lái)說(shuō),這個(gè)基本上就像是一個(gè)“普通”的 Git 存儲(chǔ)庫(kù)。
  • RW+ 允許可能具有破壞性的 Git 動(dòng)作。用戶可以執(zhí)行常規(guī)的快進(jìn)推送、回滾推送、變基以及刪除分支和標(biāo)簽。你可能想要或不希望將其授予項(xiàng)目中的所有貢獻(xiàn)者。
  • - 明確拒絕訪問(wèn)存儲(chǔ)庫(kù)。這與未在存儲(chǔ)庫(kù)的配置中列出的用戶相同。

通過(guò)調(diào)整 gitolite.conf 來(lái)創(chuàng)建一個(gè)新的存儲(chǔ)庫(kù)或修改現(xiàn)有存儲(chǔ)庫(kù)的權(quán)限。例如,授予 Alice 權(quán)限來(lái)管理一個(gè)名為 widgets.git 的新存儲(chǔ)庫(kù):

  1. repo gitolite-admin
  2. RW+ = id_ed22519
  3.  
  4. repo testing
  5. RW+ = @all
  6.  
  7. repo widgets
  8. RW+ = alice

現(xiàn)在,Alice(也僅有 Alice 一個(gè)人)可以克隆該存儲(chǔ)庫(kù):

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

在第一次推送時(shí),Alice 必須使用 -u 選項(xiàng)將其分支發(fā)送到空存儲(chǔ)庫(kù)(如同她在任何 Git 主機(jī)上做的一樣)。

為了簡(jiǎn)化用戶管理,你可以定義存儲(chǔ)庫(kù)組:

  1. @qtrepo = widgets
  2. @qtrepo = games
  3.  
  4. repo gitolite-admin
  5. RW+ = id_ed22519
  6.  
  7. repo testing
  8. RW+ = @all
  9.  
  10. repo @qtrepo
  11. RW+ = alice

正如你可以創(chuàng)建組存儲(chǔ)庫(kù)一樣,你也可以對(duì)用戶進(jìn)行分組。默認(rèn)情況下存在一個(gè)用戶組:@all。如你所料,它包括所有用戶,無(wú)一例外。你也可以創(chuàng)建自己的組:

  1. @qtrepo = widgets
  2. @qtrepo = games
  3.  
  4. @developers = alice bob
  5.  
  6. repo gitolite-admin
  7. RW+ = id_ed22519
  8.  
  9. repo testing
  10. RW+ = @all
  11.  
  12. repo @qtrepo
  13. RW+ = @developers

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

創(chuàng)建存儲(chǔ)庫(kù)

默認(rèn)情況下,Gitolite 假設(shè)存儲(chǔ)庫(kù)的創(chuàng)建是從上至下進(jìn)行。例如,有權(quán)訪問(wèn) Git 服務(wù)器的項(xiàng)目經(jīng)理創(chuàng)建了一個(gè)項(xiàng)目存儲(chǔ)庫(kù),并通過(guò) Gitolite 管理倉(cāng)庫(kù)添加了開發(fā)人員。

實(shí)際上,你可能更愿意向用戶授予創(chuàng)建存儲(chǔ)庫(kù)的權(quán)限。Gitolite 稱這些為“野生倉(cāng)庫(kù)(通配倉(cāng)庫(kù))wild repos”(我不確定這是關(guān)于倉(cāng)庫(kù)的形成方式的描述,還是指配置文件所需的通配符)。這是一個(gè)例子:

  1. @managers = alice bob
  2.  
  3. repo foo/CREATOR/[a-z]..*
  4. C = @managers
  5. RW+ = CREATOR
  6. RW = WRITERS
  7. R = READERS

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

  1. [alice]$ git clone git@example.com:foo/alice/cool-app.git
  2. Cloning into cool-app'...
  3. Initialized empty Git repository in /home/git/repositories/foo/alice/cool-app.git
  4. warning: You appear to have cloned an empty repository.

野生倉(cāng)庫(kù)的創(chuàng)建者可以使用一些機(jī)制來(lái)定義誰(shuí)可以讀取和寫入其存儲(chǔ)庫(kù),但是他們是有范圍限定的。在大多數(shù)情況下,Gitolite 假定由一組特定的用戶來(lái)管理項(xiàng)目權(quán)限。一種解決方案是使用 Git 掛鉤來(lái)授予所有用戶對(duì) gitolite-admin 的訪問(wèn)權(quán)限,以要求管理者批準(zhǔn)將更改合并到 master 分支中。

了解更多

Gitolite 具有比此介紹性文章所涵蓋的更多功能,因此請(qǐng)嘗試一下。其文檔非常出色,一旦你通讀了它,就可以自定義 Gitolite 服務(wù)器,以向用戶提供你喜歡的任何級(jí)別的控制。Gitolite 是一種維護(hù)成本低、簡(jiǎn)單的系統(tǒng),你可以安裝、設(shè)置它,然后基本上就可以將其忘卻。 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2016-09-23 20:04:26

2021-01-04 13:25:10

Git開源工具

2021-01-05 20:24:04

Git開源軟件開發(fā)

2020-11-23 07:27:22

Git Flow

2014-03-06 09:23:19

Git服務(wù)器Github

2011-04-11 11:05:07

FreeBSD 8.1

2020-02-14 12:56:56

Git多媒體文件開源

2021-02-05 05:29:51

服務(wù)器GitGogs

2022-08-24 08:33:27

Git系統(tǒng)Linux

2015-07-08 09:57:59

Git服務(wù)器分步詳解

2021-10-13 13:51:24

MDKGit管理

2023-04-01 18:19:38

團(tuán)隊(duì)MIT開源

2013-04-02 10:13:35

Git服務(wù)器系統(tǒng)GitHub

2021-03-30 10:57:46

源碼惡意軟件攻擊

2022-10-10 12:15:38

CentOSgit服務(wù)器

2024-01-31 08:15:40

Git服務(wù)器GitLab

2016-12-19 14:59:55

Git二進(jìn)制管理

2011-08-09 10:20:55

GitLinux遠(yuǎn)程倉(cāng)庫(kù)

2017-02-08 13:33:34

AndroidJavaPhp

2020-01-10 17:45:06

Git共享文件開源
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)