GitHubのようなGitサーバー?[閉まっている]


412

私はSubversionユーザーで、Gitを試してみたいと思っています。私はそれについていくつか読んで、分散した性質を理解しました-多くの利点を見ることができます。

ただし、ローカルの分岐と共有にGitを使用しながら、バックアップ、記録システムなどの役割を果たすことができる中央サーバーのアイデアが好きです。私はオープンソースプロジェクトをやっていないので、Githubを(支払わずに)使用することはできないので、私の質問は、ローカルgitサーバーを実行するためのベストプラクティスの方法は何ですか?

これは標準のGit使用パターンに反する可能性があることに気づきましたが、私のプロジェクトには役立ちます。しかし、私が見落としたかもしれない懸念はいつでも歓迎します。

よろしくお願いします!


50
中央サーバーを使用して説明することは、実際に分散バージョン管理システムの標準的な使用パターンであるため、心配する必要はありません。:-)
Aasmund Eldhuset 2011年

8
ああ-それはもっと例外だ​​と思った 「一元化されていると、手に入れられない!」コメント。ありがとう。
skaz

27
合理的な考え。:-)私の理解では、分散型VCSの大きなポイントは、中央レポを持たないことになっていること(これは非常に便利なことが多い)ではなく、中央レポを使用すること強制さないことです。ローカルコミット。必要に応じて特定の人とリビジョンを交換するのは簡単です。また、いくつかの「中央」リポジトリ(gitでは、他のリポジトリは、その役割に関係なく、リモートと呼ばれます)を持つこともできます。好きなだけ追加してください)。そして、DVCSはしばしば非常に柔軟な分岐モデルを持っています(gitがここで輝きます)。
Aasmund Eldhuset 2011年

15
Aasmundのコメントを要約/言い換えると、DVCSのポイントは、多くの場合、集中化されたリポジトリを廃止することではなく、他のすべてのユーザーにVCSの全機能を提供することです。
Cascabel 2011年

2
Googleには、プライベートリポジトリを許可する新しいCloud Source Repositoryがあります。cloud.google.com / tools / cloud-repositoriesまた、FWIW、これがオフトピックとしてマークされている理由がわかりません!
Josh M.

回答:


203

sshサーバーをセットアップし、そこで中央リポジトリを実行するだけです。その後、すべての開発者は(ポリシーの問題として)コミットの完了時にサーバーにプッシュすることに同意します。これは私の職場での使用パターンです。非常にCVSとSVNに似ています。

  1. リポジトリを配置する場所を見つけます(/var/gitrootたとえば)。
  2. 新しいリポジトリを作成します(mkdir project.git && cd project.git && git init --bare --shared=group)。
  3. 次に、クライアントで、リモートリポジトリのクローンを作成します(git clone ssh://yourserver.com/var/gitroot/project.git && cd project
  4. ファイルを追加(git add README
  5. コミット(git commit -m "Initial import")、
  6. 押す(git push origin master

これで設定が完了するはずです。


5
ちょうどそう私は明確です:別の(アクセス可能な)サーバーにgitをインストールし、リポジトリを作成します。クライアントにそのリポジトリを複製してもらいます。クライアントが修正を完了したら、サーバーリポジトリにプッシュします。ありがとう!
skaz

8
+1。実際のところ、これがあるのgitの協調的使用のための使用パターン。
Aasmund Eldhuset 2012

1
このエラーは、オリジンマスターをプッシュするときに発生しました::::カウントオブジェクト:3、完了。オブジェクトの書き込み:100%(3/3)、244バイト| 0バイト/秒、完了。合計3(デルタ0)、再利用0(デルタ0)リモート:エラー:リポジトリデータベースにオブジェクトを追加するための十分な権限がありません。 //localhost/var/gitroot/project.git![リモート拒否]マスター->マスター(アンパッカーエラー)エラー:一部の参照を 'ssh://localhost/var/gitroot/project.git'にプッシュできませんでした
Abdo

3
先ほど、ローカルのgitリポジトリをセットアップする方法についてブログ投稿しました。最大10分です。ハードなことはなど、サーバーを管理、適切なローカル・サーバーのバックアップ戦略を設定している
atmosx

走れないのgit init --bare project.git
Dan Dascalescu 2017年

199

Gitoriousは、githubのように、独自のサーバーで実行できるgitのオープンソースWebインターフェイスです。

http://getgitorious.com/

更新:

http://gitlab.org/も今では別の選択肢です。

アップデート2:

GitoriousがGitLabに加わりました


5
見栄えは良いですが、セットアップは重いようです(特に非Railsユーザーの場合)[ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado

1
インストールプロセスは大幅に簡略化されており、「Rails-y」が少なくなっています。また、getgitorious.comInstall GitoriousページにあるCentOSサーバー(およびビルド済みアプライアンス)用の自動インストーラーもあります。
thomanil 2013年

3
Gitoriousはもはや無料のオープンソースのプライベートホスティングソリューションではないようです。
Mingming 2013

1
あなたがに行けばgetgitorious.comとGitorious Community Editionの下のインストーラをクリックして、それはあなたに無料のオープンソースのプライベートホスティングソリューションを与えるものではありませんか?
クレイグ

16
また、gitlab.orgは私の回答以来開発された別の代替手段です。
クレイグ

74

試してみてくださいGitLabを

私が今まで使った中で最高のgit GUIツール。GitHubとよく似ています。

これはオープンソース(MITライセンス)であり、25.000以上のインストールで最もインストールされているgit管理ソフトウェアです。それは毎月のリリースと375以上の貢献者とアクティブなコミュニティがあります。自分のサーバー上に無制限のプライベート、内部、およびパブリックリポジトリを作成できます。ほとんどのUnixプラットフォームで実行されるRuby on Railsアプリです。


1
私は同意します、それは素晴らしいです。(+1)しかし、このコメントの時点では、インストールが面倒です。彼らはRPMをパッケージ化することができればそれは素晴らしいことだ、DEBなど
Synesso

2
Ubuntuの比較的新しい単一スクリプトの設定は、かなり簡単です。それがなくても、ほとんどはサイト外の指示に従うことです。私はRailsやUbuntuサーバーを使ったことがないので、最初に試してみました。
Jon Shier 2013

LDAP経由でActive Directoryと統合するときに問題が発生しました。
riezebosch 2014年

2
実際、最近のGitLabのインストールは非常に簡単です。それはパッケージを開梱するだけのことです。about.gitlab.com/downloadsを参照してください
ジョブ

2
Gitlab Enterpriseはもちろん無料ではありませんが、無料で簡単にインストールできるコミュニティエディションがあります。ただし、いくつかのデータベースエンジンと多くの依存関係をインストールするため、約800 MBのディスク領域が必要です。
OndroMih

39

コマンドラインを使いこなすことを気にしない場合は、異なるリポジトリに異なるアクセス権を設定する必要がある企業環境で作業する場合、gitolite最適です。@Chrisが言及したgitosisの新しいバージョンのようなものです。

これは著者のウェブサイトからの要約です:

Gitoliteを使用すると、サーバー上で1人のユーザーを使用して多くのgitリポジトリをホストし、多くの開発者にアクセスを提供できます。サーバーへの実際のユーザーIDやシェルアクセスを与える必要はありません。これを行う上での本質的な魔法は、sshのpubkeyアクセスとauthorized_keysファイルであり、インスピレーションはgitosisと呼ばれる古いプログラムにあります。

Gitoliteは、リポジトリの読み取り(クローン/フェッチ)またはリポジトリへの書き込み(プッシュ)ができるユーザーを制限できます。また、誰がどのブランチまたはタグにプッシュできるかを制限することもできます。これは、企業環境では非常に重要です。Gitoliteは、root権限を必要とせずにインストールでき、git自体とperl以外のソフトウェアは必要ありません。

非常に包括的な機能セットがありますが、私が非常に気に入っている点の1つは、毎日の構成編集のすべてが特別なgitリポジトリを介して行われることです。つまり、ユーザーの追加は

  • ユーザーを構成ファイルに追加
  • ユーザーのsshキーを追加する
  • 変更をコミットします
  • ジトールにプッシュ
  • ほら、設定はライブです!

また、ブラウザーを介してコードを確認する必要がある場合、gitoliteはgitwebとの「同期」構成をサポートしています。あるいは、あなたのような場合CGIT Cで書かれたgitのための非常に良いのWebフロントエンドで、より良い、あなたは見ておくべきである。このハウツー


24

小さなワークグループ向けのオープンソースの統合された純粋なJava Gitサーバー、ビューアー、およびリポジトリー・マネージャーであるGitblitを検討してください


Gitblitは私のアプリケーションに最適のようですが、最後のリリースが2016年であったことを心配しています。–
Roberto

1
@Roberto、有効なポイント。それはあなたが何を必要としているのか、あなたにとって何が重要なのかによると思います。それがそのままあなたのために働くなら、それはまだ有効な選択であるかもしれません。タイムリーなバグ修正が心配な場合や、さらに多くの機能が必要な場合は、必要ないかもしれません。
フロリアン

15

ベアボーンブラウザ

git instaweb --httpd=webrick

以下からのgit SCM帳

分散開発のためにここで説明したアプローチのようなものと組み合わせます(datagrokへのクレジット十分に説明された概念のへの)

任意のローカルリポジトリから1回限りのgitサーバーを起動します。

はこれをすでにツイートしましたが、いくつかの拡張を使用できると思いました:

分散型gitワークフローを有効にします:git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

変更をプルしたり、変更をプッシュしたりするコア「公式」リポジトリの操作を含むgitワークフローを使用するとします。Githubのようなgitホスティングサービスの多くのユーザーがそうであるように、多くの企業がこれを行うと確信しています。

そのサーバーまたはGithubが少しダウンしたとします。

結局のところ、gitを使用する理由の1つは、ローカルクローンにプロジェクト履歴全体のコピーがあるためです。

運用チームがサーバーを復旧させるのを待つ間、コーディングとコミットを正しく行うことができます。自己注意:運用チームのためにドーナツを購入してください。

しかし、このダウンタイム中に、同じリポジトリでgitの専門家ではない可能性がある別の人と共同作業をしたい場合はどうでしょうか。

または、ダウンタイムの代わりに、あなたとあなたの共同作業者が現場にいて、何らかの理由でVPNを取得して公式リポジトリに接続できない場合はどうなりますか?

あるいは、あなたとあなたのコラボレーターがたくさんの実験的な変更を急いで行っており、アクセスはできても、未完成の混乱を公式の中央リポジトリーにプッシュしたくない場合はどうなりますか?(機能ブランチとしても同じではありません。)悲惨なリベースやマージをクリーンアップしている最中で、ブランチがいたるところにあるかもしれません。

よくご存知のとおり、gitは「分散」バージョン管理システムです。

ワークフローで中央の「公式」Gitリポジトリを使用する場合でも、Gitをピアツーピアで使用することができます。この場合、あなたとコラボレーターはコミットをビルドして互いに共有し、中央でサーバーも知る必要はありません。

では、どのようにブランチを取得してコミットするのですか、またはその逆ですか?

  • パッチを電子メールで送信するためのgitの機能を使用できます。ただし、これは少し洗練されておらず、電子メールで送信されたパッチを適用する方法についての知識が必要です。
  • コラボレーターがsshを実行するために、自分のマシンにアカウントを作成できます。しかし、ローカルルートアクセスがないか、ボックスへのSSHアクセスでローカルルートを信頼していない可能性があります。
  • リポジトリをサムドライブに複製して、前後に渡すことができます。しかし、特に同じローカルネットワーク上にいて、サムドライブが必要な場合は、これはかなり退屈な作業です。

他の方法も考えられるでしょう。しかし、非常に簡単な方法があります。ネットワーク上でお互いを見ることができる場合、リモートとして使用できる1回限りのgitサーバーを起動して、変更のクローン、フェッチ、プルを行い、変更を加えることができます。それで終わりました。

これを可能にするツールはでgit daemon、これには多くのオプションと機能がありますが、この簡単な1回限りの「私がいるリポジトリを提供するだけ」を可能にする目的で、それを使用する方法はエイリアスを作成することです。私はそれを呼ぶのが好きgit serveです。実行:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

gitエイリアスは作業ツリーのベースディレクトリで実行されるため、エイリアスの使用は実際には非常に重要です。したがって、リポジトリのディレクトリツリー内のどこにいても、パス「.git」は常に正しい場所を指します。

新しいgit serveものを次のように使用します。

  1. を実行しますgit serve。「騒動する準備ができている」と報告します。Gitはひどいです。
  2. IPアドレスを確認します。192.168.1.123だとしましょう。
  3. 「ちょっとジェーン、私はこれらのコミットをオリジンにプッシュする準備ができていない/できませんが、実行することで私のコミットをクローンにフェッチできます git fetch git://192.168.1.123/
  4. そのリポジトリを提供したくない場合は、ctrl + cを押します。

git clone git://192.168.1.123/ local-repo-nameリポジトリのクローンがない場合は、ジェーンに伝えることもできます。または、を使用git pull git://192.168.1.123/ branchnameしてフェッチとマージを一度に実行します。機能ブランチで一緒に作業している場合に役立ちます。

ただし、リポジトリに秘密を保持している場合は、悪意のあるネットワークでは認証を行わないため、これを行わないでください。それはその存在を宣伝しませんが、ポートスキャナーを持っている人なら誰でもそれを見つけて接続し、リポジトリを複製できます。

ただし、デフォルトでは読み取り専用であるため、それほど危険ではありません。読むgit daemon書き込みアクセスを有効にする場合 manページをよくください。コラボレーターのコミットを取得したい場合は、それを読み取り専用のままにして、コラボレーターにこのコマンドも実行するように依頼する方がはるかに安全です。

接線的に関連:HTTPを介して一連の静的ファイルを一時的に共有する場合は、1回限りのサーバーを対象とします。 python -m SimpleHTTPServer


11

GitBlitを試さなければならないよりも、簡単で良いGITサーバーが必要な場合。また、私はgitoliteを使用していますが、サーバーのみです。GitBlitを使用すると、サーバー、管理者、リポジトリをすべて1つにまとめることができます。マネージャー... URL:http : //gitblit.com/


9

https://rhodecode.comは、Git&Mercurial用のオープンソースのWebアプリであり、どのオペレーティングシステムでも非常に簡単にインストールできます(インストーラーが含まれています)。

RhodeCode(新しいバージョンはRhodeCode Enterpriseと呼ばれます)は、コードレビューのような不足しているGit機能を追加し、一般に非常に高速で信頼性の高いものです。


1
ここで実際に自分のインスタンスを実行しています:code.gmgauthier.com。3.xリリースは非常にクリーンで安定しています。私は実際にはコードよりもはるかに多く使用しています(ただし、そこにはたくさんあります)。私はこれを使って、個人の日記のマスターコピー、2冊の原稿、ポッドキャストスクリプト、ブログの下書きを保存しています。これは、MarkdownとRestructuredTextの両方をレンダリングして、どこからでもドラフトを非常に読みやすくするためにも理想的です。
Greg Gauthier

8

Indeferoをインストールすることもできます。これはGoogleCodeのGPLクローンです。SubversionとGitの両方をサポートしているため、スムーズに移行できます。私はインデフェロの作者です。


私はそれを使用していて気に入っています。しかし、デザインは少し時代遅れです。それはまだ維持されていますか?
Jaroslav


8

これは最も一般的な gitサーバーのセットアップではないかもしれませんが、さまざまなレイアウト、ツール、ミラーリング、および権限スキームで遊んだことから、エンタープライズリポジトリのかなり堅固な代替手段の1つとしてGerritがあると思います。コードレビューツール。コードレビューとして使用し始め、徐々にメインリポジトリになり、g3 / gitoliteを非推奨にしました

  • デプロイは簡単です(基本的に.warをTomcatにドロップします)
  • リポジトリ、グループ、および権限を管理するためのWeb UI(またはSSH CLI)を持っている
  • 組み込みのJava sshとgitの実装があるため、他に設定するものはありません。
  • ユーザーとグループのLDAPサポート(通常、企業では必須)
  • 非常に柔軟なアクセス許可システム(プロジェクトグループ、アクセス許可の継承、読み取り/書き込み/分岐の制限/未確認の書き込みなど)
  • コードレビュー機能(それに興味がある場合)
  • リポジトリのミラーリング(一部のリポジトリをgithubまたは他のパブリックリポジトリにプッシュするため)

さらに、大規模なプロジェクト(例:android、chrome)で使用されるため、拡張性があり、かなり安定しています。コードレビュー部分のバイパスを許可する場合は、ユーザーにPUSH権限を付与してください。


7

リモートホスティングの場合bitbucket.orgは無料のプライベートリポジトリを提供していると他の人が言ったように、私は問題なくそれを使ってきました。

ローカルまたはLANネットワークの 場合、これをscm-manager.orgに 1つ追加します(単一の実行可能ファイルはインストールが非常に簡単で、Javaで作成されているため、LinuxまたはWindowsで実行できます)。インストールする場合に備えて、これらはデフォルトのパスワードです。

Username: scmadmin
Password: scmadmin

3
デフォルトの認証情報を提供していただきありがとうございます。
Ryan Williams

6

その間、MercurialホスティングサイトのBitbucketもGitリポジトリを提供し始めました。

したがって、ローカルサーバーが不要な場合は、プライベートGitリポジトリを無料でホストできる中心的な場所にすぎないので、IMO Bitbucketが最適です。

無料で、無制限のプライベートおよびパブリックGitおよびMercurialリポジトリーを取得できます。
唯一の制限は、無料プランでは、5人以下のユーザーがプライベートリポジトリにアクセスできることです(それ以上の場合、料金が発生します)。
詳細については、https://bitbucket.org/plansを参照してください



2

リポジトリを中央に配置したい場合は、Gitのような分散バージョン管理を使用すると非常に簡単
です。中央のリポジトリを中央のマシンの共有フォルダーに置くだけで、誰でもそこから複製できます。

ローカルサーバーに「実際の」ウェブサイトが必要な場合は、Gitホスティングウェブサイトhttp://repo.or.czを知っています。
GitHubより機能が少ないようですが、GitHubとは異なり、ソースコードを取得して独自のローカルサーバーでホストできます。

免責事項:私はrepo.or.czについてのみ読んだので、自分で試したことがありません!


2

単純なセットアップの場合、中央サーバーへのsshアクセスを提供し、この「オリジン」からプッシュ/プルするように各ユーザーの作業ディレクトリをセットアップできます。これは、小規模なチームにとって最もシンプルで一般的なセットアップです。

httpサーバーとそれをリモートで管理する機能を提供するgitosisを調べることもできます。そうすれば、sshアクセスや各コミッターに伴うすべてのアクセスを許可する必要がなくなります。


2

Chrisの発言に追加するには、gitosis(http://eagain.net/gitweb/?p=git​​osis.git)を使用して、実際にリポジトリにアクセスできるユーザーを制御できます。

使用方法によっては、フック(.git / hooksフォルダー内)を使用して、ローカルマシンからプッシュしたときにコードがサーバーのファイルシステムに自動的にプルされるようにすることもできます。これを行うための一般的なスクリプトは次のとおりです:http : //utsl.gen.nz/git/post-update。ただし、これはすべての場合に必要なわけではありません。


更新後のスクリプトへのリンクが無効になっています...
Morten Jensen


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.