1. ホーム
  2. ギット

ギットサーバーのセットアップ

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と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
新しいユーザー git を追加します。このユーザーは、すべてのコードリポジトリとユーザーパーミッションの管理者として機能します。



a@ubuntu:~$ sudo useradd -m git
gitのパスワードを設定します。



a@ubuntu:~$ sudo passwd git
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




サーバー上のgitユーザーを初期化します。このステップは、実際にはgitosisのインストールを準備するためのものですが、もちろん、どのマシンでもgitを初めて使うときには初期化する必要があります。



a@ubuntu:~$ git config --global user.name "ly44770"



a@ubuntu:~$ git config --global user.email " [email protected] "
gitosis の準備にも使う python setup ツールをインストールします。



a@ubuntu:~$ sudo apt-get install python-setuptools
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
gitユーザーに切り替わります。



---------------------------



a@ubuntu:/tmp/gitosis$。 su git
デフォルトでは、gitosis は git リポジトリを git ユーザーのホームの下に置くので、/home/prj_git にリンクを作成します。



$ 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




a@ubuntu:/tmp/gitosis$。 sudo chmod a+r /tmp/id_rsa.pub
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/)。
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 # 終了
テスト用にサーバー上に新しい空のプロジェクトリポジトリを作成しましょう。私は "teamwork" という名前のリポジトリを作成しました。



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
次に、あなたのチームのすべての 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 # 終了
gitosis.confファイルを修正して、私の設定はおおよそ次のようになります。



[ギトギト]
[グループ gitosis-admin] です。



書き込み可能 = gitosis-admin



メンバーズ =
aubuntu
[グループチーム]



書き込み可能=チームワーク



メンバーズ =
aubuntu b
[グループ・チーム・ロ]



readonly = チームワーク



メンバー = lz
この設定ファイルでは、次のように表現しています。gitosis-admin グループにはメンバー a がいて、gitosis-admin リポジトリへの読み込みと書き込みのアクセス権を持っています。



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
さて、これでサーバーがセットアップされ、サーバー上に空のプロジェクトのチームワークができました。次は何をすればいいのでしょうか?もちろん、テストすることです。空のリポジトリはクローンではないので、バージョンを初期化するために書き込み権限を持つ人が必要です。私がやります、そして以下はクライアント側で行います。
a@ubuntu:~/work/teamwork-ori$。 echo "/*add something*/" > hello
a@ubuntu:~/work/teamwork-ori$。 git add .



a@ubuntu:~/work/teamwork-ori$。 git commit -am "初期バージョン"




この時点で、チームワークはバージョンを持ち、チームの他のメンバーは、最初にチームワークリポジトリをクローンする限り、好きなようにそれを使って遊ぶことができるのです。



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"
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
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 再起動
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/
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>
4. 許可を与えることが重要である。
chgrp -R www-data /home/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 再起動
匿名でのアクセス方法です。



ギットクローン
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: ファイルの追加に失敗しました。
(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ファイルシステムはシンボリックリンクをサポートしていません。
(4) gitosis の設定における members 変数のグループメンバーの使用について
## ユーザーを何度もリストアップするのを避けるためだけにグループを使用することができます note



## writable= や readonly= の行はありません。
[グループ・パブリック・グループ]



メンバー = a b c d xiaoming
## こんな感じの@public-groupです。
[グループ prj1]です。



書き込み可能=prj/build



メンバー = lihua @public-group