|
現: 2024-11-07 (木) 10:42:45 yuji |
| + | * Gitで扱えるリモートリポジトリのタイプとアクセス方法 [#ja868ca4] |
| | | |
| + | ** bareリポジトリとnon bareリポジトリ [#j026ff77] |
| + | Gitで使用するリポジトリには,bareリポジトリとnon bareリポジトリの2種類のリポジトリがある。~ |
| + | |
| + | bareリポジトリとnon bareリポジトリ違いは,以下のようになります。~ |
| + | - bareリポジトリ~ |
| + | bareリポジトリは,''ワークディレクトリ(ワークツリー)''が存在しないリポジトリのことです。~ |
| + | 要するに,実際のファイルが存在せずに履歴情報やブランチ・タグとかそういった情報のみのリポジトリの事。~ |
| + | 慣習的に識別するリポジトリの名前の末に''.git''を付けることになっているようだ。~ |
| + | ~ |
| + | GitHubとかGitLabとかGitBucketなどでも,.gitが付いたbareリポジトリをユーザーとかグループごとに管理して,WEBページとして表示しているわけです。~ |
| + | リポジトリに対する操作は,''non bareリポジトリ''から行います。~ |
| + | - non bareリポジトリ~ |
| + | non bareリポジトリは,ワークディレクトリ(ワークツリー)が存在するリポジトリのことです。~ |
| + | 通常Gitを利用して管理する場合,ワークディレクトリ(ワークツリー)で作業を行い,ローカルリポジトリ(non bareリポジトリ)を管理に使用します。~ |
| + | |
| + | *** 中央リポジトリ [#na232b4f] |
| + | Gitは分散型リポジトリ方式なので,実際には''中央リポジトリ''という概念は存在しない。~ |
| + | しかしそれだと複数の人達や複数マシンで開発を行う場合不便になるので,「このリポジトリを中央にしよう!」というように,一元管理するためにリモートリポジトリを設ける事になります。~ |
| + | |
| + | このような目的のリモートリポジトリの事を,中央リポジトリって呼ぶことがあります。~ |
| + | |
| + | つまり,個人的にファイルの履歴管理だけをしたい場合は,non bareリポジトリのみの管理(リモートリポジトリを使用しない)で,特に問題は無いわけです。~ |
| + | |
| + | ちなみに,リモートリポジトリっていうのは自分のローカルリポジトリ以外の全てのリポジトリのことを指すので,別にnon bareリポジトリでなくても自分のリポジトリ以外は全てリモートリポジトリと呼びます。~ |
| + | |
| + | *** なぜリモートリポジトリをbareリポジトリにするのか [#d41c9a7c] |
| + | リモートリポジトリを作成する時には一般的にbareリポジトリにするのだが,それには理由があります。~ |
| + | - ファイルを直接編集させない~ |
| + | リモートリポジトリをnon bareにすると,ファイルの編集が容易に出来てしまいます。~ |
| + | これのなにが問題かというと,リモートリポジトリにあるファイル自体を勝手に編集(あるいはコピーして編集)する人がかならず出てくるわけです,ちょっと信じられないのですが・・・~ |
| + | |
| + | 「このファイルってなに?」とか言いながら編集しちゃう人がいる。「バージョン管理してますよ!」って言っても,まあ聞きません・・・~ |
| + | PowerPointやExcelで開かれたりすると,その瞬間無茶苦茶になってしまいます。~ |
| + | |
| + | 「バージョン管理システム使ってるから勝手に編集しないで・・・」あるいは「バージョン管理システムを使って手元で編集して下さい。」というのが正しいわけですが,バージョン管理の概念の無い現場だと,その管理は到底困難です。~ |
| + | |
| + | リモートリポジトリをbareにすることで,こういった「サーバーのファイルを直接編集,あるいはコピーして編集されるという」不毛な問題を解決出来るわけです。~ |
| + | |
| + | またbareリポジトリはワークディレクトリ(ワークツリー)がない分,non bareに比べて容量が減ることになります。~ |
| + | |
| + | ** リモートリポジトリへのアクセス方法 [#m4631fa8] |
| + | リモートリポジトリへのアクセス方法には,以下のようなものがあります。~ |
| + | - ''ローカルファイルプロトコル''~ |
| + | Gitの各種ツールからローカルファイルとしてリポジトリに直接アクセスする方法。~ |
| + | ローカルファイルと同様に,MS Network(SMB)やNFSのようなネットワーク上のファイルシステムなどでも,OSの機能によりGitから直接アクセス出来ます。~ |
| + | この場合,''ネットワーク上で直接アクセス出来るファイルシステムがあれば,特に他のサーバー機能は必要ありません''。~ |
| + | 欠点としては,ローカルネットワーク上に接続されているマシンでしか利用することが出来ません。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone //u3/repos/xxxxx.git |
| + | とか, |
| + | $ git clone file:///opt/repos/xxxxx.git |
| + | のようにする。~ |
| + | - ''Gitプロトコル''~ |
| + | Git独自のネットワークプロトコルを使用し,ネットワーク経由でリポジトリへアクセスする方法。~ |
| + | 使用するPortは9418番を使う。スピード重視なので,ユーザー認証が無く誰でもアクセス出来てしまう。なので更新等が出来るようにしちゃうと,かなり危険となる。~ |
| + | このためGitプロトコルを使用する場合,''pull''コマンドのみ使用出来るように制限して,更新・変更はsshプロトコルで''push''するというような使い方をすることが多い。~ |
| + | この場合,Gitリポジトリサーバーシステムが必要。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone git://server/xxxxx.git |
| + | のように''git://サーバー/リポジトリ''でアクセスできる。~ |
| + | - ''sshプロトコル''~ |
| + | 公開鍵暗号・認証技術のsshプロトコルを使用して,安全にネットワーク経由でリモートリポジトリにアクセスする方法。~ |
| + | Gitを使う場合この方式でのリモートリポジトリへアクセスは一般的によく行われている。~ |
| + | この場合,アクセスを提供する側にsshサーバーが必要となる。~ |
| + | 欠点としてはsshでのアクセスなので,''匿名ユーザでは利用出来ない''。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone ssh://user@server.com/xxxxx.git |
| + | - ''rsyncプロトコル''~ |
| + | rsyncはUNIXシステムなどで使用されるネットワーク間でファイルのやり取りを行うプロトコル。~ |
| + | このプロトコルを使用して,Gitはリモートリポジトリへアクセスする事ができる。~ |
| + | この場合,アクセスを提供する側でrsyncサーバーが必要となる。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone rsync://server.com/repos/xxxxx.git |
| + | - ''ftpプロトコル''~ |
| + | GitからFTP/FTPSプロトコルを使ってリポジトリファイルにアクセス方法。~ |
| + | この場合,アクセスを提供する側でFTPーバーが必要となる。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone ftp://server.com[:port]/repos/xxxxx.git |
| + | - ''http/httpsプロトコル''~ |
| + | GitからHTTP/HTTPSプロトコルを使ってリポジトリファイルにアクセス方法。~ |
| + | リモートリポジトリをWEBサーバー側のHTTPのドキュメントルートに配置したり,WebDAV(HTTPプロトコルでファイルシステムとしてアクセスする)を使ってアクセスする方法。~ |
| + | この場合,アクセスを提供する側でWEBサーバーやWebDAVサーバーが必要となる。~ |
| + | 使い方は以下のようにする。~ |
| + | $ git clone http://server.com/repos/xxxxx.git |
| + | |
| + | これらどれかの方法でリモートリポジトリにアクセスできる。~ |
| + | |
| + | クローズなネットワーク環境(企業のローカルネットワーク)でGitを使用する場合は,特別なサーバーマシンなどが必要ないローカルファイルシステム(つまりファイル共有機能)を使えば問題無いと思われる。~ |