Git Server Gefällt dir GitHub? [geschlossen]


412

Ich bin ein langjähriger Subversion-Benutzer, der Git ausprobieren wird. Ich habe einige darüber gelesen und verstehe die verteilte Natur - ich kann viele der Vorteile sehen.

Ich mag jedoch die Idee eines zentralen Servers, der die Rolle von Backups, Aufzeichnungssystemen usw. übernehmen kann, während Git weiterhin für meine lokale Verzweigung und Freigabe verwendet wird. Ich mache kein Open-Source-Projekt, daher kann ich Github nicht verwenden (ohne zu bezahlen). Meine Frage lautet also wirklich: Was ist eine bewährte Methode, um einen lokalen Git-Server auszuführen?

Mir ist klar, dass dies möglicherweise gegen das Standard-Git-Verwendungsmuster verstößt, aber es wird für mein Projekt nützlich sein. Alle Bedenken, die ich möglicherweise übersehen habe, sind jedoch immer willkommen.

Vielen Dank!


50
Die Verwendung eines zentralisierten Servers, wie Sie ihn beschreiben, ist eigentlich ein Standardnutzungsmuster für verteilte Versionskontrollsysteme. Machen Sie sich also keine Sorgen. :-)
Aasmund Eldhuset

8
Ahh - dachte, es wäre eher die Ausnahme. Wollte abwehren "Wenn Sie Zentralisierung haben, dann bekommen Sie es einfach nicht!" Bemerkungen. Vielen Dank.
Skaz

27
Ein vernünftiger Gedanke. :-) Nach meinem Verständnis besteht der große Punkt bei verteilten VCS nicht darin, dass Sie kein zentrales Repo haben sollen (dies ist oft sehr nützlich), sondern dass Sie nicht gezwungen sind , das zentrale Repo zu verwenden - Sie können durchführen lokale Commits, und es ist einfach, bei Bedarf Revisionen mit bestimmten Personen auszutauschen, und Sie können sogar mehrere "zentrale" Repos haben (in git wird jedes andere Repo, egal welche Rolle es hat, als Remote bezeichnet , und Sie können füge so viele hinzu, wie du willst). Und DVCS haben oft sehr flexible Verzweigungsmodelle (Git leuchtet hier).
Aasmund Eldhuset

15
Um Aasmunds Kommentar zusammenzufassen / neu zu formulieren: Der Sinn eines DVCS besteht oft nicht darin, das zentralisierte Repository zu beseitigen, sondern jedem einzelnen anderen Benutzer die volle Leistung des VCS zu bieten.
Cascabel

2
Google hat ein neues Cloud Source Repository, das private Repos erlaubt: cloud.google.com/tools/cloud-repositories Auch FWIW, nicht sicher, warum dies als nicht zum Thema gehörend markiert ist!
Josh M.

Antworten:


203

Sie können einfach einen SSH-Server einrichten und dort ein zentrales Repository ausführen. Alle Entwickler erklären sich dann einfach (aus politischen Gründen) damit einverstanden, auf den Server zu pushen, wenn sie mit dem Festschreiben fertig sind. Dies ist das Nutzungsmuster an meinem Arbeitsplatz. Sehr CVS und SVN-ähnlich.

  1. Suchen Sie einen Ort, an dem Sie das Repository ablegen können ( /var/gitrootzum Beispiel).
  2. Erstelle ein neues Repo ( mkdir project.git && cd project.git && git init --bare --shared=group).
  3. Klonen Sie dann auf Ihrem Client das Remote-Repo ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project)
  4. füge einige Dateien hinzu ( git add README)
  5. commit ( git commit -m "Initial import"),
  6. push ( git push origin master)

Dies sollte die Dinge für Sie einrichten.


5
Nur damit mir klar ist: Installiere git auf einem anderen (zugänglichen) Server und erstelle ein Repo. Lassen Sie Kunden dieses Repo klonen. Wenn ein Client einen Fix abgeschlossen hat, drücken Sie auf das Server-Repo. Vielen Dank!
Skaz

8
+1. Tatsächlich ist dies das Verwendungsmuster für die kollaborative Verwendung von Git.
Aasmund Eldhuset

1
Dieser Fehler trat auf, wenn der Ursprungsmaster gepusht wurde :::: Objekte zählen: 3, fertig. Objekte schreiben: 100% (3/3), 244 Bytes | 0 Bytes / s, fertig. Insgesamt 3 (Delta 0), wiederverwendet 0 (Delta 0) Remote: Fehler: Unzureichende Berechtigung zum Hinzufügen eines Objekts zur Repository-Datenbank. //localhost/var/gitroot/project.git! [Remote abgelehnt] Master -> Master (Unpacker-Fehler) Fehler: Einige Refs konnten nicht an 'ssh: //localhost/var/gitroot/project.git' gesendet werden
Abdo

3
Ich habe vor einiger Zeit einen Blog-Beitrag darüber geschrieben, wie man ein lokales Git-Repo einrichtet . Es sind max. 10 Minuten. Das
Schwierige

Kannst du nicht einfach rennen git init --bare project.git?
Dan Dascalescu

199

Gitorious ist eine Open-Source-Weboberfläche für Git, die Sie auf Ihrem eigenen Server ausführen können, ähnlich wie Github:

http://getgitorious.com/

Aktualisieren:

http://gitlab.org/ ist jetzt auch eine andere Alternative.

Update 2:

Gitorious ist jetzt GitLab beigetreten


5
Sieht gut aus, aber das Setup scheint schwer zu sein (insbesondere für einen Benutzer ohne Schienen) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado

1
Der Installationsprozess wird derzeit stark vereinfacht und weniger "Rails-y". Auf der Seite " Gitorious installieren " unter getgitorious.com steht außerdem ein automatisiertes Installationsprogramm für CentOS-Server (und eine vorgefertigte Appliance) zur Verfügung .
Thomasil

3
Es scheint, dass Gitorious keine kostenlose Open-Source-Lösung für privates Hosting mehr ist.
Mingming

1
Wenn Sie zu getgitorious.com gehen und unter Gitorious Community Edition auf Installer klicken, erhalten Sie dann keine kostenlose Open-Source-Lösung für privates Hosting?
Craig

16
Auch gitlab.org ist eine weitere Alternative, die seit meiner Antwort entwickelt wurde.
Craig

74

Probieren Sie GitLab aus

Das beste Git-GUI-Tool, das ich je benutzt habe. Es ist GitHub sehr ähnlich.

Es ist Open Source (MIT-Lizenz) und mit über 25.000 Installationen die am häufigsten installierte Git-Management-Software. Es hat monatliche Veröffentlichungen und eine aktive Community mit über 375 Mitwirkenden. Sie können unbegrenzt private, interne und öffentliche Repositorys auf Ihrem eigenen Server haben. Es ist eine Ruby on Rails-App, die auf den meisten Unix-Plattformen ausgeführt wird.


1
Ich stimme zu, es ist großartig. (+1) Ab diesem Kommentar ist die Installation jedoch schwierig. Es wäre großartig, wenn sie U / min, deb usw.
verpacken

2
Ich habe festgestellt, dass das relativ neue Einzelskript-Setup für Ubuntu ziemlich schmerzfrei ist. Auch ohne es geht es meistens darum, die Anweisungen außerhalb der Website zu befolgen. Ich habe noch nie Rails oder sogar Ubuntu-Server verwendet und habe es beim ersten Versuch zum Laufen gebracht.
Jon Shier

Ich hatte einige Probleme bei der Integration in Active Directory über LDAP.
Riezebosch

2
Eigentlich ist GitLab heutzutage ziemlich einfach zu installieren. Es geht nur darum, ein Paket auszupacken. Siehe about.gitlab.com/downloads
Job

2
Gitlab Enterprise ist natürlich nicht kostenlos, aber es gibt eine Community Edition , die kostenlos und auch einfach zu installieren ist. Es erfordert jedoch rund 800 MB Speicherplatz, da einige Datenbankmodule und viele Abhängigkeiten installiert werden.
OndroMih

39

Wenn es Ihnen nichts ausmacht, sich mit der Befehlszeile zu beschmutzen, ist Gitolite ein absoluter Genuss , wenn Sie in einer Unternehmensumgebung arbeiten, in der Sie unterschiedliche Zugriffsrechte für verschiedene Repositorys festlegen müssen. Es ist eine Art neuere Version der von @Chris erwähnten Gitosis.

Hier ist die Zusammenfassung von der Website des Autors:

Mit Gitolite können Sie einen einzelnen Benutzer auf einem Server verwenden, um viele Git-Repositorys zu hosten und vielen Entwicklern Zugriff zu gewähren, ohne ihnen echte Benutzer-IDs oder Shell-Zugriff auf den Server gewähren zu müssen. Die wesentliche Magie dabei ist der Pubkey-Zugriff von ssh und die Datei authorized_keys. Die Inspiration war ein älteres Programm namens gitosis.

Gitolite kann einschränken, wer aus einem Repository lesen (klonen / abrufen) oder schreiben (pushen) darf. Es kann auch einschränken, wer auf welchen Zweig oder Tag pushen kann, was in einer Unternehmensumgebung sehr wichtig ist. Gitolite kann ohne Root-Berechtigungen und ohne zusätzliche Software als Git selbst und Perl installiert werden.

Es hat einen ziemlich umfassenden Funktionsumfang, aber eine Sache, die mir sehr gefällt, ist, dass die gesamte tägliche Konfigurationsbearbeitung über ein spezielles Git-Repository erfolgt. Das heißt, das Hinzufügen eines Benutzers ist gerecht

  • Benutzer zur Konfigurationsdatei hinzufügen
  • Fügen Sie den SSH-Schlüssel des Benutzers hinzu
  • Übernehmen Sie die Änderung
  • Schieben Sie es zu Gitolite
  • Voila, die Konfiguration ist live!

Und wenn Sie den Code über einen Browser anzeigen müssen, unterstützt gitolite die "Synchronisierung" der Konfiguration mit gitweb. Oder wenn Sie cgit mögen , ein sehr gutes Web-Frontend für in C geschriebenes git, dann sollten Sie sich diese Anleitung ansehen .


24

Sie könnten Gitblit in Betracht ziehen , einen Open-Source-integrierten, reinen Java Git-Server, Viewer und Repository-Manager für kleine Arbeitsgruppen.


Gitblit scheint perfekt für meine Anwendung zu sein, aber es macht mir Sorgen, dass die letzte Veröffentlichung im Jahr 2016 war.
Roberto

1
@ Roberto, ein gültiger Punkt. Ich denke, es hängt davon ab, was Sie brauchen oder was Ihnen wichtig ist. Wenn es für Sie so funktioniert, wie es ist, könnte es immer noch eine gültige Wahl sein. Wenn Sie sich Sorgen über rechtzeitige Fehlerbehebungen machen oder weitere Funktionen benötigen, ist dies möglicherweise nicht der Fall.
Florian

15

Bare Bones Browser

git instaweb --httpd=webrick

aus dem git scm buch

kombinieren Sie es mit so etwas wie dem hier beschriebenen Ansatz für die verteilte Entwicklung ( Dank an datagrok für das gut beschriebene Konzept)

Starten Sie einen einmaligen Git-Server von einem beliebigen lokalen Repository aus.

Ich habe dies bereits getwittert, aber ich dachte, es könnte eine Erweiterung gebrauchen:

Aktivieren Sie den dezentralen Git-Workflow: git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-path .git /"

Angenommen, Sie verwenden einen Git-Workflow, bei dem Sie mit einem "offiziellen" Kern-Repository arbeiten, von dem Sie Ihre Änderungen abrufen und übertragen. Ich bin sicher, dass viele Unternehmen dies tun, ebenso wie viele Benutzer von Git-Hosting-Diensten wie Github.

Angenommen, der Server oder Github fällt für eine Weile aus.

Keine Sorge, einer der Gründe, warum Sie git verwenden, ist, dass Sie eine Kopie des gesamten Projektverlaufs in Ihrem lokalen Klon haben.

Sie können weiterhin codieren und festschreiben, während Sie darauf warten, dass das Betriebsteam den Server wieder zum Leben erweckt. Hinweis für sich selbst: Kaufen Sie Donuts für das Betriebsteam.

Aber was ist, wenn Sie während dieser Ausfallzeit mit einer anderen Person, die möglicherweise kein Git-Experte ist, im selben Repository zusammenarbeiten möchten?

Oder was ist, wenn Sie und Ihr Mitarbeiter vor Ort sind und aus irgendeinem Grund Ihr VPN nicht dazu bringen kann, eine Verbindung zu Ihrem offiziellen Repo herzustellen?

Oder was ist, wenn Sie und Ihr Mitarbeiter eine Reihe experimenteller Änderungen vornehmen und obwohl Sie Zugriff haben, möchten Sie Ihr unvollendetes Durcheinander nicht in das offizielle zentrale Repository verschieben? (Nicht einmal als Feature-Zweige.) Vielleicht sind Sie gerade dabei, eine katastrophale Rebase oder Zusammenführung zu bereinigen, und die Zweige sind überall.

Nun, git ist, wie Sie wahrscheinlich wissen, ein "verteiltes" Versionskontrollsystem .

Auch wenn Sie in Ihrem Workflow möglicherweise ein zentrales "offizielles" Git-Repository verwenden, haben Sie dennoch die Möglichkeit, Git auf Peer-to-Peer-Weise zu verwenden, wobei Sie und Ihr Mitarbeiter einfach Commits erstellen und untereinander und mit dem zentralen Repository teilen Server muss es nie wissen.

Wie bringen Sie Ihre Filialen und Commits zu ihnen oder umgekehrt?

  • Sie können die Funktionen von git zum Versenden von Patches per E-Mail verwenden. Aber das ist ein bisschen unelegant und erfordert einige Kenntnisse darüber, wie E-Mail-Patches angewendet werden.
  • Sie können auf Ihrem eigenen Computer ein Konto erstellen, in das Ihr Mitarbeiter ssh einbinden kann. Aber vielleicht haben Sie keinen lokalen Root-Zugriff, oder Sie vertrauen ihnen nicht mit SSH-Zugriff auf Ihre Box.
  • Sie können Ihr Repo auf einen Thumbdrive klonen und es hin und her weitergeben. Dies ist jedoch ziemlich mühsam, insbesondere wenn Sie sich zufällig im selben lokalen Netzwerk befinden und einen USB-Stick benötigen.

Sie können wahrscheinlich auch an andere Methoden denken. Aber es gibt einen super einfachen Weg: Wenn Sie sich im Netzwerk sehen können, können Sie einen einmaligen Git-Server starten, den sie als Fernbedienung verwenden können, um Ihre Änderungen zu klonen, abzurufen, abzurufen und zu beenden, wenn Sie es sind damit fertig.

Das Tool, das dies ermöglicht git daemon, verfügt über viele Optionen und Funktionen. Um dieses einfache einmalige "nur das Repo bedienen zu können, in dem ich mich befinde" zu aktivieren, müssen Sie einen Alias ​​erstellen. Ich nenne es gerne git serve. Lauf:

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

Die Verwendung eines Alias ​​ist tatsächlich von entscheidender Bedeutung, da Git-Aliase im Basisverzeichnis Ihres Arbeitsbaums ausgeführt werden. Der Pfad '.git' zeigt also immer auf die richtige Stelle, unabhängig davon, wo Sie sich im Verzeichnisbaum Ihres Repositorys befinden.

Verwenden Sie Ihr neues git servewie folgt:

  1. Ausführen git serve. "Bereit zu rumpeln", wird es berichten. Git ist böse.
  2. Finden Sie Ihre IP-Adresse heraus. Angenommen, es ist 192.168.1.123.
  3. Sagen Sie "Hey Jane, ich bin nicht bereit / in der Lage, diese Commits auf den Ursprung zu bringen, aber Sie können meine Commits durch Ausführen in Ihren Klon holen. git fetch git://192.168.1.123/"
  4. Drücken Sie Strg + C, wenn Sie dieses Repo nicht mehr bedienen möchten.

Sie können Jane auch sagen, git clone git://192.168.1.123/ local-repo-nameob sie noch keinen Klon des Repositorys hat. Oder verwenden Sie git pull git://192.168.1.123/ branchnamediese Option, um sofort abzurufen und zusammenzuführen. Dies ist hilfreich, wenn Sie gemeinsam an einem Feature-Zweig arbeiten.

Beachten Sie jedoch, dass Sie dies nicht in feindlichen Netzwerken tun sollten, wenn Sie Geheimnisse in Ihrem Repository aufbewahren, da keine Authentifizierung vorhanden ist. Es macht keine Werbung für seine Existenz, aber jeder mit einem Port-Scanner kann es finden, eine Verbindung herstellen und Ihr Repo klonen.

Aber es ist nicht besonders gefährlich, da es standardmäßig schreibgeschützt ist. Lesen Sie die git daemonManpage sorgfältig durch, wenn Sie der Meinung sind, dass Sie den Schreibzugriff aktivieren möchten. In dem Fall, in dem Sie die Commits Ihres Mitarbeiters erhalten möchten, ist es viel sicherer, sie schreibgeschützt zu lassen und Ihren Mitarbeiter zu bitten, diesen Befehl ebenfalls auszuführen, damit Sie sie abrufen können.

Tangential verwandt: Zum Thema einmalige Server, wenn Sie vorübergehend eine Reihe statischer Dateien über HTTP freigeben möchten: python -m SimpleHTTPServer


11

Wenn Sie einen guten, einfachen GIT-Server benötigen, müssen Sie GitBlit ausprobieren. Auch ich benutze Gitolite, aber es ist nur Server, mit GitBlit bekommen Sie alles in einem, Server, Admin, Repos. Manager ... URL: http://gitblit.com/


9

https://rhodecode.com ist eine Open-Source-Web-App für Git & Mercurial, die sehr einfach unter jedem Betriebssystem installiert werden kann (ein Installationsprogramm ist enthalten).

RhodeCode (die neue Version heißt RhodeCode Enterprise) fügt fehlende Git-Funktionen wie Codeüberprüfung hinzu und ist im Allgemeinen sehr schnell und zuverlässig.


1
Ich führe hier tatsächlich meine eigene Instanz aus: code.gmgauthier.com . Die 3.x-Version ist bemerkenswert sauber und stabil. Ich benutze es eigentlich für viel mehr als nur Code (obwohl es dort oben viel davon gibt). Ich verwende es, um Masterkopien meiner persönlichen Tagebücher, Manuskripte für zwei Bücher, Podcast-Skripte und Blog-Entwürfe aufzubewahren. Dies ist ideal, auch weil es sowohl Markdown als auch RestructuredText für Sie rendert und die Entwürfe von überall aus gut lesbar macht.
Greg Gauthier

8

Sie können auch Indefero installieren , es ist ein GPL-Klon von GoogleCode, da es sowohl Subversion als auch Git unterstützt und Sie einen reibungslosen Übergang haben können. Ich bin der Autor von Indefero.


Ich benutze es und mag es. Das Design ist jedoch etwas veraltet. Wird es noch gepflegt?
Jaroslav


8

Es ist vielleicht nicht das am häufigsten verwendete Git-Server-Setup, aber nachdem ich mit verschiedenen Layouts, Tools, Spiegeln und Berechtigungsschemata gespielt habe, würde ich sagen, dass Gerrit eine ziemlich solide Alternative für Unternehmens-Repositorys ist , was überraschend erscheinen mag, da es eher als bekannt ist Codeüberprüfungstool. Wir haben damit begonnen, es als Codeüberprüfung zu verwenden, und es wurde langsam zu unserem Haupt-Repository, das g3 / gitolite ablehnte

  • Die Bereitstellung ist unkompliziert (Sie lassen die .war im Grunde genommen in einem Kater fallen).
  • hat eine Web-Benutzeroberfläche zum Verwalten von Repositorys, Gruppen und Berechtigungen (oder eine SSH-CLI)
  • verfügt über eine integrierte Java-SSH- und Git-Implementierung, sodass Sie nichts anderes einrichten müssen
  • LDAP-Unterstützung für Benutzer und Gruppen (normalerweise ein Muss für Unternehmen)
  • ein sehr flexibles Berechtigungssystem (mit Projektgruppen, Berechtigungsvererbung, Einschränkung von Lesen / Schreiben / Verzweigen / nicht überprüften Schreibvorgängen / usw.)
  • Codeüberprüfungsfunktionen (wenn Sie sich für dieses Ding interessieren)
  • Repo-Spiegelung (um einige Repositorys an Github oder ein anderes öffentliches Repo zu senden)

Darüber hinaus wird es von großen Projekten (z. B. Android, Chrome) verwendet, sodass es skaliert und jetzt ziemlich solide ist. Geben Sie Ihren Benutzern einfach die PUSH-Berechtigung, wenn Sie die Umgehung des Codeüberprüfungsteils zulassen möchten.


7

Für ein Remote-Hosting Wie andere gesagt haben, bietet bitbucket.org kostenlose private Repositories an. Ich habe es ohne Probleme verwendet.

Für ein lokales Netzwerk oder ein LAN-Netzwerk werde ich dieses scm-manager.org hinzufügen (Eine einzelne ausführbare Datei ist sehr einfach zu installieren, sie wurde unter Java erstellt und kann unter Linux oder Windows ausgeführt werden). Nur für den Fall, dass Sie es installieren, sind dies Standardkennwörter.

Username: scmadmin
Password: scmadmin

3
Vielen Dank, dass Sie die Standardanmeldeinformationen angegeben haben.
Ryan Williams

6

In der Zwischenzeit bietet die Mercurial- Hosting-Site Bitbucket auch Git-Repositories an.

Wenn Sie also keinen lokalen Server benötigen, sondern nur einen zentralen Ort, an dem Sie private Git-Repositorys kostenlos hosten können, ist IMO Bitbucket die beste Wahl.

Kostenlos erhalten Sie unbegrenzt private und öffentliche Git- und Mercurial-Repositories.
Die einzige Einschränkung besteht darin, dass im kostenlosen Plan nicht mehr als fünf Benutzer auf Ihre privaten Repositorys zugreifen können (für mehr müssen Sie bezahlen).
Siehe https://bitbucket.org/plans für weitere Informationen!



2

Wenn Sie Ihr Repository nur an einem zentralen Ort haben möchten, ist dies mit einer verteilten Versionskontrolle wie Git ganz einfach:
Sie können Ihr zentrales Repository einfach in einem freigegebenen Ordner auf einem zentralen Computer ablegen und jeder kann es von dort aus klonen.

Wenn Sie eine "echte" Website auf Ihrem lokalen Server möchten, kenne ich die Git-Hosting-Website http://repo.or.cz .
Es scheint weniger Funktionen als GitHub zu haben, aber im Gegensatz zu GitHub können Sie den Quellcode abrufen und auf Ihrem eigenen lokalen Server hosten.

Haftungsausschluss: Ich habe nur über repo.or.cz gelesen, ich habe es nie selbst versucht!


2

Für einfache Setups können Sie ssh-Zugriff auf einen zentralen Server gewähren und das Arbeitsverzeichnis jedes Benutzers so einrichten, dass es von diesem 'Ursprung' aus pusht / zieht. Das wäre das einfachste und gebräuchlichste Setup für kleine Teams.

Sie könnten sich auch mit Gitosis befassen, die Ihnen einen http-Server und die Möglichkeit bietet, ihn remote zu verwalten. Auf diese Weise müssen Sie nicht jedem Committer SSH-Zugriff und alles, was dazu gehört, gewähren.


2

Um das zu ergänzen, was Chris gesagt hat, können Sie Gitosis (http://eagain.net/gitweb/?p=gitosis.git) verwenden, um zu steuern, wer tatsächlich auf das Repo zugreifen kann.

Abhängig von Ihrer Verwendung können Sie auch Hooks (im Ordner .git / hooks) verwenden, damit Ihr Code automatisch in das Dateisystem des Servers gezogen wird, wenn Sie von Ihrem lokalen Computer aus pushen. Hier ist ein beliebtes Skript dafür: http://utsl.gen.nz/git/post-update . Dies ist jedoch nicht in allen Fällen erforderlich.


Der Link zum Post-Update-Skript ist tot ...
Morten Jensen


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.