ギットサーバーのセットアップ
2022-02-21 21:41:23
取得元:http://blog.chinaunix.net/u/22630/showart_2190222.html
オンラインソースを参考にしながらgitサーバーを構築していく過程が以下のように記されています。
必要なハードウェア:社内LANに別IPを持つlinux Ubuntuコンピュータ(仮想マシン)、グループ全員がpingを通せる保証があること。
必要なソフトウェア:git-core、gitosis、openssh-server、openssh-client
必要なソフトウェア:git-core、gitosis、openssh-server、openssh-client
gitとopensshのインストール。
a@ubuntu:~$ sudo apt-get install git-core
a@ubuntu:~$ sudo apt-get install openssh-server
a@ubuntu:~$ sudo apt-get install openssh-client
a@ubuntu:~$ sudo apt-get install git-core
a@ubuntu:~$ sudo apt-get install openssh-server
a@ubuntu:~$ sudo apt-get install openssh-client
gitのリポジトリを作るために、/home/prj_gitの下に置き、git以外のユーザーにはこのディレクトリへのパーミッションを与えないようにしました。
a@ubuntu:~$ sudo mkdir /home/prj_git
a@ubuntu:~$ sudo chown git:git /home/prj_git
a@ubuntu:~$ sudo chmod 700 /home/prj_git
a@ubuntu:~$ sudo mkdir /home/prj_git
a@ubuntu:~$ sudo chown git:git /home/prj_git
a@ubuntu:~$ sudo chmod 700 /home/prj_git
サーバー上のgitユーザーを初期化します。このステップは、実際にはgitosisのインストールを準備するためのものですが、もちろん、どのマシンでもgitを初めて使うときには初期化する必要があります。
a@ubuntu:~$ git config --global user.name "ly44770"
a@ubuntu:~$ git config --global user.email " [email protected] "
gitosisのパッケージを取得する。
a@ubuntu:~$ cd /tmp
a@ubuntu:/tmp$。 git clone git://eagain.net/gitosis.git
a@ubuntu:/tmp$。 cd gitosis
a@ubuntu:/tmp/gitosis$。 sudo python setup.py install
a@ubuntu:~$ cd /tmp
a@ubuntu:/tmp$。 git clone git://eagain.net/gitosis.git
a@ubuntu:/tmp$。 cd gitosis
a@ubuntu:/tmp/gitosis$。 sudo python setup.py install
デフォルトでは、gitosis は git リポジトリを git ユーザーのホームの下に置くので、/home/prj_git にリンクを作成します。
$ ln -s /home/prj_git /home/git/repositories
$ ln -s /home/prj_git /home/git/repositories
再びデフォルトユーザーに戻る
$ 終了
$ 終了
もしあなたがgitサーバの管理者になるのであれば、sshの公開鍵をあなたのパソコン(別のパソコン)で
a@ubuntu:~$ ssh-keygen -t rsa
公開鍵をサーバーの /tmp 以下にコピーし、他の人に読み取り権限を与えます。
a@ubuntu:~$ scp .ssh/id_rsa.pub [email protected]:/tmp
[email protected] の パスワード
id_rsa.pub 100% 390 0.4KB/s 00:00
gitosisを起動させるために。
a@ubuntu:/tmp/gitosis$。 sudo -H -u git gitosis-init < /tmp/id_rsa.pub
ホーム/prj_git/gitosis-admin.git/に空のGitリポジトリを初期化しました。
既存のGitリポジトリを再初期化(/home/prj_git/gitosis-admin.git/)。
a@ubuntu:/tmp/gitosis$。 sudo -H -u git gitosis-init < /tmp/id_rsa.pub
ホーム/prj_git/gitosis-admin.git/に空のGitリポジトリを初期化しました。
既存のGitリポジトリを再初期化(/home/prj_git/gitosis-admin.git/)。
gitosis の面白いところは、設定ファイルを /home/prj_git/gitosis-admin.git に置かれた git リポジトリで管理するところです。にあるファイルに実行可能なパーミッションを追加する必要があります。
a@ubuntu:/home/git$。 sudo passwd root
a@ubuntu:/home/git$。 su
ルート@ubuntu:/home/git # cd repositories
ルート@ubuntu:/home/git/repositories # cd gitosis-admin.git/
root@ubuntu:/home/git/repositories/gitosis-admin.git # sudo chmod 755 /home/prj_git/gitosis-admin.git/hooks/post-update
root@ubuntu:/home/git/repositories/gitosis-admin.git # 終了
a@ubuntu:/home/git$。 sudo passwd root
a@ubuntu:/home/git$。 su
ルート@ubuntu:/home/git # cd repositories
ルート@ubuntu:/home/git/repositories # cd gitosis-admin.git/
root@ubuntu:/home/git/repositories/gitosis-admin.git # sudo chmod 755 /home/prj_git/gitosis-admin.git/hooks/post-update
root@ubuntu:/home/git/repositories/gitosis-admin.git # 終了
テスト用にサーバー上に新しい空のプロジェクトリポジトリを作成しましょう。私は "teamwork" という名前のリポジトリを作成しました。
gitユーザーに切り替わります。
a@ubuntu:/home/git$。 su - git
$ cd /home/prj_git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ 終了
gitユーザーに切り替わります。
a@ubuntu:/home/git$。 su - git
$ cd /home/prj_git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ 終了
自分のコンピュータで、リポジトリ gitosis-admin.git をクローンして、管理者として設定を変更できるようにします。
あなたのパソコンで
a@ubuntu:~/work$さん git clone [email protected]:gitosis-admin.git
空のGitリポジトリを/home/a/work/gitosis-admin/.git/に初期化しました。
リモートの オブジェクトを数えています。5、完了しました。
リモートで オブジェクトを圧縮しています。100% (4/4), 完了しました。
リモート 合計5(デルタ0)、再利用5(デルタ0)
オブジェクトを受信する。100%(5/5)、完了しました。
a@ubuntu:~/work$さん
cd gitosis-admin/
新しいユーザーを追加するテストをするため。
a@ubuntu:~/work/gitosis-admin$。 sudo useradd -m b
a@ubuntu:~/work/gitosis-admin$。 sudo passwd b
a@ubuntu:~/work/gitosis-admin$。 sudo useradd -m b
a@ubuntu:~/work/gitosis-admin$。 sudo passwd b
次に、あなたのチームのすべての ssh 公開鍵ファイルを取り出し、b.pub、lz.pub などの名前を付けて、すべて keydir にコピーします。
a@ubuntu:~/work/gitosis-admin$。 su root
ルート@ubuntu:/home/a/work/gitosis-admin # cp /home/b/.ssh/id_rsa.pub . /keydir/b.pub
a@ubuntu:~/work/gitosis-admin$。 cp /tmp/lz.pub . /keydir/
ルート@ubuntu:/home/a/work/gitosis-admin # 終了
a@ubuntu:~/work/gitosis-admin$。 su root
ルート@ubuntu:/home/a/work/gitosis-admin # cp /home/b/.ssh/id_rsa.pub . /keydir/b.pub
a@ubuntu:~/work/gitosis-admin$。 cp /tmp/lz.pub . /keydir/
ルート@ubuntu:/home/a/work/gitosis-admin # 終了
gitosis.confファイルを修正して、私の設定はおおよそ次のようになります。
[ギトギト]
[ギトギト]
[グループ gitosis-admin] です。
書き込み可能 = gitosis-admin
メンバーズ = aubuntu
書き込み可能 = gitosis-admin
メンバーズ = aubuntu
[グループ・チーム・ロ]
readonly = チームワーク
メンバー = lz
readonly = チームワーク
メンバー = lz
この設定ファイルでは、次のように表現しています。gitosis-admin グループにはメンバー a がいて、gitosis-admin リポジトリへの読み込みと書き込みのアクセス権を持っています。
team グループにはメンバー a, b がおり、このグループは teamwork リポジトリに対する読み取りと書き込みのアクセス権を持っています。
team_ro グループには、チームワークリポジトリに読み取り専用でアクセスできる lz というメンバーがいます。
team グループにはメンバー a, b がおり、このグループは teamwork リポジトリに対する読み取りと書き込みのアクセス権を持っています。
team_ro グループには、チームワークリポジトリに読み取り専用でアクセスできる lz というメンバーがいます。
もちろん、これらの設定ファイルの変更は現時点ではローカルにしか存在しません。実際に有効にするためには、リモートの gitserver にプッシュする必要があります。
新しいファイルを追加し、コミットして git サーバーにプッシュします。
a@ubuntu:~/work/gitosis-admin$。 git add .
a@ubuntu:~/work/gitosis-admin$。 git commit -am "チームウィークprjとユーザーを追加します"
a@ubuntu:~/work/gitosis-admin$。 git push origin master
新しいファイルを追加し、コミットして git サーバーにプッシュします。
a@ubuntu:~/work/gitosis-admin$。 git add .
a@ubuntu:~/work/gitosis-admin$。 git commit -am "チームウィークprjとユーザーを追加します"
a@ubuntu:~/work/gitosis-admin$。 git push origin master
さて、これでサーバーがセットアップされ、サーバー上に空のプロジェクトのチームワークができました。次は何をすればいいのでしょうか?もちろん、テストすることです。空のリポジトリはクローンではないので、バージョンを初期化するために書き込み権限を持つ人が必要です。私がやります、そして以下はクライアント側で行います。
a@ubuntu:~/work$さん
mkdir teamwork-ori
a@ubuntu:~/work$さん cd teamwork-ori/
a@ubuntu:~/work/teamwork-ori$。 git init
a@ubuntu:~/work$さん cd teamwork-ori/
a@ubuntu:~/work/teamwork-ori$。 git init
a@ubuntu:~/work/teamwork-ori$。
echo "/*add something*/" > hello
a@ubuntu:~/work/teamwork-ori$。
git リモート add origin
[email protected]:teamwork.git
a@ubuntu:~/work/teamwork-ori$。 git push origin master
a@ubuntu:~/work/teamwork-ori$。 git push origin master
この時点で、チームワークはバージョンを持ち、チームの他のメンバーは、最初にチームワークリポジトリをクローンする限り、好きなようにそれを使って遊ぶことができるのです。
a@ubuntu:~/work/teamwork-ori$。 su b
$ cd /home/b
$ git clone [email protected]:teamwork.git
cdチームワーク
$ vim hello
$ git add .
$ git commit -am "b add"
$ vim hello
$ git add .
$ git commit -am "b add"
git push origin master
$ 終了
$ 終了
また、TEAM が使用するために gitserver に置きたい既製の git リポジトリがある場合はどうでしょうか(たとえば、公式のカーネルリポジトリをクローンして、それをベースリポジトリとして内部で使用したい場合など)。
まず、作業中のリポジトリから純粋なリポジトリを取得する必要があります。たとえば、作業ディレクトリが ~/kernel で、純粋なリポジトリをフラッシュドライブにエクスポートして gitserver にコピーしたいとします。
$ git clone --bare ~/kernel /media/udisk
そして、udiskを取り出し、gitserverの管理者に渡して/home/prj_git/にコピーしてもらい、同時にgitosis関連の設定ファイルをああ、これは改めて言うまでもありませんね。例えば ALSA ライブラリをダウンロードする。
git clone git://android.git.kernel.org/platform/external/alsa-lib.git
git clone git://android.git.kernel.org/platform/external/alsa-utils.gitをクローンしてください。
ベアライブラリの生成
git clone --bare alsa-lib alsa-lib.git
git clone --bare alsa-utils alsa-utils.git
git clone --bare alsa-lib alsa-lib.git
git clone --bare alsa-utils alsa-utils.git
4. ベアリポジトリをgitサーバーのディレクトリに移動する
cp alsa-lib.git /home/prj_git
5. コミット権取得のための所有者変更に注意。
chown -R git alsa-lib.git
で、Oなんだ、へぇ。
Webアクセス方法を設定します。
Apacheの共通コマンドです。
a2dissite gitserver 無効化
a2ensite gitserver enable
/etc/init.d/apache2 restart 再起動
a2dissite gitserver 無効化
a2ensite gitserver enable
/etc/init.d/apache2 restart 再起動
1. apt-get install apache2
2. gitwebを手動でインストールする
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
GITWEB_PROJECTOOT="/home/prj_git" prefix=/usr gitweb/gitweb.cgi を作成します。
cd gitweb
cp -av git* /home/prj_git/
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
GITWEB_PROJECTOOT="/home/prj_git" prefix=/usr gitweb/gitweb.cgi を作成します。
cd gitweb
cp -av git* /home/prj_git/
3.vim /etc/apache2/sites-available/gitserver
<VirtualHost 172.20.146.39:80>
サーバー名 172.20.146.39
DocumentRoot /home/prj_git
ScriptAlias /cgi-bin/ /home/prj_git
<ディレクトリ /home/prj_git>
オプション ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
すべて許可する
注文の許可、拒否
すべてから許可する
AddHandler cgi-script cgi
ディレクトリインデックス gitweb.cgi
</Directory>
</VirtualHost>
<VirtualHost 172.20.146.39:80>
サーバー名 172.20.146.39
DocumentRoot /home/prj_git
ScriptAlias /cgi-bin/ /home/prj_git
<ディレクトリ /home/prj_git>
オプション ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
すべて許可する
注文の許可、拒否
すべてから許可する
AddHandler cgi-script cgi
ディレクトリインデックス gitweb.cgi
</Directory>
</VirtualHost>
4. 許可を与えることが重要である。
chgrp -R www-data /home/prj_git
chmod a+r prj_git
chmod a+x prj_git
chmod a+r prj_git
chmod a+x prj_git
mv hooks/post-update.sample hooks/post-update
5.a2ensite gitserver
6./etc/init.d/apache2 再起動
6./etc/init.d/apache2 再起動
匿名でのアクセス方法です。
ギットクローン http://192.168.1.1/alsa-lib.git
<スパン ギットクローン http://192.168.1.1/alsa-utils.git
git アクセスメソッド。
ギットクローン [email protected]:alsa-lib.git
<スパン ウェブページのナビゲーションです。
http://192.168.1.1
ギットクローン http://192.168.1.1/alsa-lib.git
<スパン ギットクローン http://192.168.1.1/alsa-utils.git
git アクセスメソッド。
ギットクローン [email protected]:alsa-lib.git
<スパン ウェブページのナビゲーションです。
http://192.168.1.1
発生した問題点
1. Windows のファイル名は大文字と小文字を区別しませんが、linux は大文字と小文字を区別しています。これは、アンドロイドのソースコードをダウンロードするときに問題が発生します。この問題があるファイルは約15個あります。
2. ライブラリの説明ファイルは、.gitフォルダのdescriptionファイルにあります。そのファイルを編集すれば、gitwebのページで説明文を見ることができます。
3. gitosis library hooks の下にある post-update は post-update.sample からリネームされたものではなく、同じものではありません。post-update はライブラリとの整合性を保つためにワーキングディレクトリを更新します。設定ファイルはこのままでは更新されません。
4.(1) git@hello:/home/git$ git add .
error: readlink("external/openssl/apps/md4.c"): そのようなファイルまたはディレクトリはありません
error: unable to index file external/openssl/apps/md4.c
fatal: ファイルの追加に失敗しました。
1. Windows のファイル名は大文字と小文字を区別しませんが、linux は大文字と小文字を区別しています。これは、アンドロイドのソースコードをダウンロードするときに問題が発生します。この問題があるファイルは約15個あります。
2. ライブラリの説明ファイルは、.gitフォルダのdescriptionファイルにあります。そのファイルを編集すれば、gitwebのページで説明文を見ることができます。
3. gitosis library hooks の下にある post-update は post-update.sample からリネームされたものではなく、同じものではありません。post-update はライブラリとの整合性を保つためにワーキングディレクトリを更新します。設定ファイルはこのままでは更新されません。
4.(1) git@hello:/home/git$ git add .
error: readlink("external/openssl/apps/md4.c"): そのようなファイルまたはディレクトリはありません
error: unable to index file external/openssl/apps/md4.c
fatal: ファイルの追加に失敗しました。
(2)root@/external/openssl# git init
空のGitリポジトリを/external/openssl/.git/に初期化しました。
root@/external/openssl # git add .
error: readlink("apps/md4.c"): そのようなファイルまたはディレクトリがありません
error: unable to index file apps/md4.c
fatal: ファイルの追加に失敗しました。
(3) [email protected]_r2$ rm -Rf .repo
[email protected]_r2 $ find . -名前 ".git" | xargs rm -Rf
[email protected]_r2 $ を見つける。-名前 ".git"
[email protected]_r2 $ git init
android-2.1_r2-hopen/.git/に空のGitリポジトリを初期化しました。
[email protected]_r2 $ git add .
error: readlink("external/openssl/apps/md4.c"): そのようなファイルまたはディレクトリはありません
error: unable to index file external/openssl/apps/md4.c
fatal: ファイルの追加に失敗しました。
エラー理由: ntfsファイルシステムはシンボリックリンクをサポートしていません。
空のGitリポジトリを/external/openssl/.git/に初期化しました。
root@/external/openssl # git add .
error: readlink("apps/md4.c"): そのようなファイルまたはディレクトリがありません
error: unable to index file apps/md4.c
fatal: ファイルの追加に失敗しました。
(3) [email protected]_r2$ rm -Rf .repo
[email protected]_r2 $ find . -名前 ".git" | xargs rm -Rf
[email protected]_r2 $ を見つける。-名前 ".git"
[email protected]_r2 $ git init
android-2.1_r2-hopen/.git/に空のGitリポジトリを初期化しました。
[email protected]_r2 $ git add .
error: readlink("external/openssl/apps/md4.c"): そのようなファイルまたはディレクトリはありません
error: unable to index file external/openssl/apps/md4.c
fatal: ファイルの追加に失敗しました。
エラー理由: ntfsファイルシステムはシンボリックリンクをサポートしていません。
(4) gitosis の設定における members 変数のグループメンバーの使用について
## ユーザーを何度もリストアップするのを避けるためだけにグループを使用することができます note
## writable= や readonly= の行はありません。
## writable= や readonly= の行はありません。
[グループ・パブリック・グループ]
メンバー = a b c d xiaoming
メンバー = a b c d xiaoming
## こんな感じの@public-groupです。
[グループ prj1]です。
書き込み可能=prj/build
メンバー = lihua @public-group
書き込み可能=prj/build
メンバー = lihua @public-group
関連
-
[解決済み】gitが「変更をコミットするか、マージする前にstashしてください」と言うのを解決するには?
-
[解決済み] マージ後のコミットで Git エラー - fatal: マージ中に部分的なコミットはできない
-
[解決済み] Node.jsアプリのコンパイルに失敗し、プッシュが拒否された heroku
-
[解決済み] Git のステージされていない変更から "old mode 100755 new mode 100644" というファイルを削除するにはどうすればよいですか?
-
[解決済み] git hooks : clone フックってあるんですか?
-
[解決済み] gitのルートディレクトリを1つのコマンドで取得する方法はありますか?
-
[解決済み] gitが「差分を解消している」と言うとき、実際には何をしているのですか?
-
fatal: リモートリポジトリから読み取れませんでした
-
git pull prompts なぜこのマージが必要なのかを説明するコミットメッセージを入力してください。
-
git pull reports error:The following untracked working tree files would be overwritten by merge.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み] git push でのエラー = ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
[解決済み] masterブランチとorigin/masterが分岐してしまったのですが、「分岐を解除」する方法は?
-
のエラーが発生しました。マージが終了していません(MERGE_HEADが存在します)。
-
Git Please tell me who you are
-
hint: ローカルにない。これは通常、他のリポジトリがプッシュすることによって発生します。
-
リモートです。ユーザー名またはパスワードが無効です。致命的:......の認証に失敗しました。