見出し画像

GitWeb

 増えた gitマスターリポジトリをブラウザで簡単に探せるようにする備忘録です。Git 標準の「GitWeb」を使えば無料です。


前提

AlmaLinux release 8.10 (Cerulean Leopard)
Apache 2.4.37
git 2.43.5

CentOS Linux release 7.7.1908 (Core)
Apache 2.4.6
git 2.36.6 (iusリポジトリからインストール)

 Apache がデフォルトで稼働しているものとします。

GitWeb のインストール

 AlmaLinux の標準リポジトリなら

$ sudo dnf install gitweb

 標準リポジトリ以外から git をインストールしている場合は

$ sudo yum install git236-gitweb --enablerepo=ius

などでインストールします。

設定例a

 gitマスターリポジトリを

/
└─ opt
    └─ repository
        ├─ ABLauncherFree.git
        ├─ FlappyCrowFree.git
        │   ...
        └─ UnicodeFree.git

のようなパスに配置している場合、「/etc/gitweb.conf」の

#our $projectroot = "/var/lib/git";

our $projectroot = "/opt/repository";

へ 変更します。
http://localhost/git/
http://192.168.0.123/git/
URLの「/git/」は「/etc/httpd/conf.d/gitweb.conf」で設定されています。

設定例b

 設定例a は多く見つかりますが、私は gitマスターリポジトリをフォルダで分類しています。

/
└─ opt
    ├─ develop
    │   ├─ try1.git
    │   │   ...
    │   └─ try2.git
    └─ repository
        ├─ ABLauncherFree.git
        ├─ FlappyCrowFree.git
        │   ...
        └─ UnicodeFree.git

 Git リポジトリのルートディレクトリ($projectroot)は1つだけですが、サブディレクトリ内のリポジトリを再帰的に走査されるので、次のように
「/opt/gitweb」をルートディレクトリとして作成し シンボリックリンクを張ると現状のパス変更を回避できます。

$ sudo mkdir /opt/gitweb
$ sudo ln -s /opt/develop /opt/gitweb/develop
$ sudo ln -s /opt/repository/opt/gitweb/repository
/
└─ opt
    ├─ gitweb
    │   ├─ develop -> /opt/develop
    │   └─ repository -> /opt/repository
    ├─ develop
    │   ├─ try1.git
    │   │   ...
    │   └─ try2.git
    └─ repository
        ├─ ABLauncherFree.git
        ├─ FlappyCrowFree.git
        │   ...
        └─ UnicodeFree.git

「/etc/gitweb.conf」の「$projectroot」は

our $projectroot = "/opt/gitweb";

へ 変更します。

おまけ

ダークモード / GitWeb

ダークモード

 スタイルシートを修正してダークモードにしてみました。ファイルは「/var/www/git/static/gitweb.css」です。元に戻せるようにバックアップしておきます。

$ sudo mv /var/www/git/static/gitweb.css /var/www/git/static/gitweb.css.org
$ sudo vi /var/www/git/static/gitweb.css

で下記のようにして保存します。

body {
	font-family: sans-serif;
	font-size: small;
	border: solid #444444;
	border-width: 1px;
	margin: 10px;
	background-color: #1e1e1e;
	color: #c9d1d9;
}

a {
	color: #58a6ff;
}

a:hover, a:visited, a:active {
	color: #ff7b72;
}

span.cntrl {
	border: dashed #aaaaaa;
	border-width: 1px;
	padding: 0px 2px 0px 2px;
	margin:  0px 2px 0px 2px;
}

img.logo {
	float: right;
	border-width: 0px;
}

img.avatar {
	vertical-align: middle;
}

img.blob {
	max-height: 100%;
	max-width: 100%;
}

a.list img.avatar {
	border-style: none;
}

div.page_header {
	height: 25px;
	padding: 8px;
	font-size: 150%;
	font-weight: bold;
	background-color: #2d333b;
}

div.page_header a:visited, a.header {
	color: #58a6ff;
}

div.page_header a:hover {
	color: #ff7b72;
}

div.page_nav {
	padding: 8px;
}

div.page_nav a:visited {
	color: #58a6ff;
}

div.page_path {
	padding: 8px;
	font-weight: bold;
	border: solid #444444;
	border-width: 0px 0px 1px;
}

div.page_footer {
	height: 22px;
	padding: 4px 8px;
	background-color: #2d333b;
}

div.page_footer_text {
	line-height: 22px;
	float: left;
	color: #8b949e;
	font-style: italic;
}

div#generating_info {
	margin: 4px;
	font-size: smaller;
	text-align: center;
	color: #8b949e;
}

div.page_body {
	padding: 8px;
	font-family: monospace;
	color: #adbac7;
}

div.title, a.title {
	display: block;
	padding: 6px 8px;
	font-weight: bold;
	background-color: #2d333b;
	text-decoration: none;
	color: #adbac7;
}

div.readme {
	padding: 8px;
}

a.title:hover {
	background-color: #444c56;
}

div.title_text {
	padding: 6px 0px;
	border: solid #444444;
	border-width: 0px 0px 1px;
	font-family: monospace;
	color: #adbac7;
}

div.log_body {
	padding: 8px 8px 8px 150px;
}

span.age {
	position: relative;
	float: left;
	width: 142px;
	font-style: italic;
}

span.signoff {
	color: #8b949e;
}

div.log_link {
	padding: 0px 8px;
	font-size: 70%;
	font-family: sans-serif;
	font-style: normal;
	position: relative;
	float: left;
	width: 136px;
}

div.list_head {
	padding: 6px 8px 4px;
	border: solid #444444;
	border-width: 1px 0px 0px;
	font-style: italic;
}

.author_date, .author {
	font-style: italic;
}

div.author_date {
	padding: 8px;
	border: solid #444444;
	border-width: 0px 0px 1px 0px;
}

a.list {
	text-decoration: none;
	color: #adbac7;
}

a.subject, a.name {
	font-weight: bold;
}

table.tags a.subject {
	font-weight: normal;
}

a.list:hover {
	text-decoration: underline;
	color: #ff7b72;
}

a.text {
	text-decoration: none;
	color: #58a6ff;
}

a.text:visited {
	text-decoration: none;
	color: #ff7b72;
}

a.text:hover {
	text-decoration: underline;
	color: #ff7b72;
}

table {
	padding: 8px 4px;
	border-spacing: 0;
	color: #adbac7;
}

table.diff_tree {
	font-family: monospace;
}

table.combined.diff_tree th {
	text-align: center;
}

table.combined.diff_tree td {
	padding-right: 24px;
}

table.combined.diff_tree th.link,
table.combined.diff_tree td.link {
	padding: 0px 2px;
}

table.combined.diff_tree td.nochange a {
	color: #8b949e;
}

table.combined.diff_tree td.nochange a:hover,
table.combined.diff_tree td.nochange a:visited {
	color: #ff7b72;
}

table.blame {
	border-collapse: collapse;
}

table.blame td {
	padding: 0px 5px;
	font-size: 100%;
	vertical-align: top;
}

th {
	padding: 2px 5px;
	font-size: 100%;
	text-align: left;
}

tr.light,
table.blame .light:hover {
	background-color: #2d333b;
}

tr.dark,
table.blame .dark:hover {
	background-color: #444c56;
}

tr.light:hover,
tr.dark:hover {
	background-color: #555c69;
}

tr.boundary td.sha1,
tr.no-previous td.linenr {
	font-weight: bold;
}

tr.color1 { background-color: #2d2f27; }
tr.color2 { background-color: #2f2736; }
tr.color3 { background-color: #372c2f; }

td {
	padding: 2px 5px;
	font-size: 100%;
	vertical-align: top;
	color: #adbac7;
}

td.link, td.selflink {
	padding: 2px 5px;
	font-family: sans-serif;
	font-size: 70%;
}

td.selflink {
	padding-right: 0px;
}

td.sha1 {
	font-family: monospace;
}

.error {
	color: red;
	background-color: yellow;
}

td.current_head {
	text-decoration: underline;
}

td.category {
	background-color: #2d333b;
	border-top: 1px solid #444444;
	border-left: 1px solid #444444;
	font-weight: bold;
}

table.diff_tree span.file_status.new {
	color: #39d353;
}

table.diff_tree span.file_status.deleted {
	color: #f85149;
}

table.diff_tree span.file_status.moved,
table.diff_tree span.file_status.mode_chnge {
	color: #8b949e;
}

table.diff_tree span.file_status.copied {
	color: #39d353;
}

table.project_list td.noage {
	color: #8b949e;
	font-style: italic;
}

table.project_list td.age2, table.blame td.age2 {
	font-style: italic;
}

table.project_list td.age1 {
	color: #39d353;
	font-style: italic;
}

table.blame td.age1 {
	color: #39d353;
	background: transparent;
}

table.project_list td.age0 {
	color: #39d353;
	font-style: italic;
	font-weight: bold;
}

table.blame td.age0 {
	color: #39d353;
	background: transparent;
	font-weight: bold;
}

td.pre, div.pre, div.diff {
	font-family: monospace;
	font-size: 12px;
	white-space: pre;
}

td.mode {
	font-family: monospace;
}

div#progress_bar {
	height: 2px;
	margin-bottom: -2px;
	background-color: #444444;
}

div#progress_info {
	float: right;
	text-align: right;
	color: #adbac7;
}

/* Additional elements remain unchanged(追加の要素は変更されません) */
/* format of (optional) objects size in 'tree' view */
td.size {
	font-family: monospace;
	text-align: right;
}

/* styling of diffs (patchsets): commitdiff and blobdiff views */
div.diff.header,
div.diff.extended_header {
	white-space: normal;
}

div.diff.header {
	font-weight: bold;

	background-color: #edece6;

	margin-top: 4px;
	padding: 4px 0px 2px 0px;
	border: solid #d9d8d1;
	border-width: 1px 0px 1px 0px;
}

div.diff.header a.path {
	text-decoration: underline;
}

div.diff.extended_header,
div.diff.extended_header a.path,
div.diff.extended_header a.hash {
	color: #777777;
}

div.diff.extended_header .info {
	color: #b0b0b0;
}

div.diff.extended_header {
	background-color: #f6f5ee;
	padding: 2px 0px 2px 0px;
}

div.diff a.list,
div.diff a.path,
div.diff a.hash {
	text-decoration: none;
}

div.diff a.list:hover,
div.diff a.path:hover,
div.diff a.hash:hover {
	text-decoration: underline;
}

div.diff.to_file a.path,
div.diff.to_file {
	color: #007000;
}

div.diff.add {
	color: #008800;
}

div.diff.add span.marked {
	background-color: #aaffaa;
}

div.diff.from_file a.path,
div.diff.from_file {
	color: #aa0000;
}

div.diff.rem {
	color: #cc0000;
}

div.diff.rem span.marked {
	background-color: #ffaaaa;
}

div.diff.chunk_header a,
div.diff.chunk_header {
	color: #990099;
}

div.diff.chunk_header {
	border: dotted #ffe0ff;
	border-width: 1px 0px 0px 0px;
	margin-top: 2px;
}

div.diff.chunk_header span.chunk_info {
	background-color: #ffeeff;
}

div.diff.chunk_header span.section {
	color: #aa22aa;
}

div.diff.incomplete {
	color: #cccccc;
}

div.diff.nodifferences {
	font-weight: bold;
	color: #600000;
}

/* side-by-side diff */
div.chunk_block {
	overflow: hidden;
}

div.chunk_block div.old {
	float: left;
	width: 50%;
	overflow: hidden;
}

div.chunk_block div.new {
	margin-left: 50%;
	width: 50%;
}

div.chunk_block.rem div.old div.diff.rem {
	background-color: #fff5f5;
}
div.chunk_block.add div.new div.diff.add {
	background-color: #f8fff8;
}
div.chunk_block.chg div     div.diff {
	background-color: #fffff0;
}
div.chunk_block.ctx div     div.diff.ctx {
	color: #404040;
}


div.index_include {
	border: solid #d9d8d1;
	border-width: 0px 0px 1px;
	padding: 12px 8px;
}

div.search {
	font-size: 100%;
	font-weight: normal;
	margin: 4px 8px;
	float: right;
	top: 56px;
	right: 12px
}

div.projsearch {
	text-align: center;
	margin: 20px 0px;
}

div.projsearch form {
	margin-bottom: 2px;
}

td.linenr {
	text-align: right;
}

a.linenr {
	color: #999999;
	text-decoration: none
}

a.rss_logo {
	float: right;
	padding: 3px 5px;
	line-height: 10px;
	border: 1px solid;
	border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e;
	color: #ffffff;
	background-color: #ff6600;
	font-weight: bold;
	font-family: sans-serif;
	font-size: 70%;
	text-align: center;
	text-decoration: none;
}

a.rss_logo:hover {
	background-color: #ee5500;
}

a.rss_logo.generic {
	background-color: #ff8800;
}

a.rss_logo.generic:hover {
	background-color: #ee7700;
}

span.refs span {
	padding: 0px 4px;
	font-size: 70%;
	font-weight: normal;
	border: 1px solid;
	background-color: #ffaaff;
	border-color: #ffccff #ff00ee #ff00ee #ffccff;
}

span.refs span a {
	text-decoration: none;
	color: inherit;
}

span.refs span a:hover {
	text-decoration: underline;
}

span.refs span.indirect {
	font-style: italic;
}

span.refs span.ref {
	background-color: #aaaaff;
	border-color: #ccccff #0033cc #0033cc #ccccff;
}

span.refs span.tag {
	background-color: #ffffaa;
	border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
}

span.refs span.head {
	background-color: #aaffaa;
	border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
}

span.atnight {
	color: #cc0000;
}

span.match {
	color: #e00000;
}

div.binary {
	font-style: italic;
}

div.remote {
	margin: .5em;
	border: 1px solid #d9d8d1;
	display: inline-block;
}

/* JavaScript-based timezone manipulation */

.popup { /* timezone selection UI */
	position: absolute;
	/* "top: 0; right: 0;" would be better, if not for bugs in browsers */
	top: 0; left: 0;
	border: 1px solid;
	padding: 2px;
	background-color: #f0f0f0;
	font-style: normal;
	color: #000000;
	cursor: auto;
}

.close-button { /* close timezone selection UI without selecting */
	/* float doesn't work within absolutely positioned container,
	 * if width of container is not set explicitly */
	/* float: right; */
	position: absolute;
	top: 0px; right: 0px;
	border:  1px solid green;
	margin:  1px 1px 1px 1px;
	padding-bottom: 2px;
	width:     12px;
	height:    10px;
	font-size:  9px;
	font-weight: bold;
	text-align: center;
	background-color: #fff0f0;
	cursor: pointer;
}


/* Style definition generated by highlight 2.4.5, http://andre-simon.de/doku/highlight/en/highlight.php */

/* Highlighting theme definition: */

.num    { color:#2928ff; }
.esc    { color:#ff00ff; }
.str    { color:#ff0000; }
.dstr   { color:#818100; }
.slc    { color:#838183; font-style:italic; }
.com    { color:#838183; font-style:italic; }
.dir    { color:#008200; }
.sym    { color:#000000; }
.line   { color:#555555; }
.kwa    { color:#000000; font-weight:bold; }
.kwb    { color:#830000; }
.kwc    { color:#000000; font-weight:bold; }
.kwd    { color:#010181; }

 httpd を再起動すると反映されます。

$ sudo systemctl restart httpd

終わり

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?