Mit Git in S3 veröffentlichen?

86

Weiß jemand, wie man das macht? Bisher konnte ich über Google nichts Nützliches finden.

Ich möchte wirklich ein lokales Repo einrichten und git pushes in S3 veröffentlichen. Die Idee ist, die lokale Versionskontrolle über Assets, aber den Remotespeicher in S3 zu haben.

Kann das gemacht werden und wenn ja, wie?

Andrew
quelle
1
OP, Derzeit gilt die akzeptierte Antwort nicht für die gestellte Frage. Wäre es möglich, ein Update zum Wohle der Allgemeinheit durchzuführen? Ich glaube s3fs, eine tragfähige Lösung zu sein.
Bnjmn
1
@Benjamin Danke, dass du mich auf dieses aufmerksam gemacht hast, es wurde aktualisiert.
Andrew
Wäre es nicht sinnvoll, in einem Remote-Repository bereitzustellen (um einen Sicherungsverlauf von Commits beizubehalten) und einen Git-Hook zu verwenden, um einfach mit einem S3-Bucket zu synchronisieren (z. B. :) s3cmd sync …?
Fabien Snauwaert

Antworten:

50

1 Verwenden Sie JGit über http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

Laden Sie jgit.sh herunter, benennen Sie es in jgit um und fügen Sie es in Ihren Pfad ein (zum Beispiel $ HOME / bin).

Richten Sie die .jgit-Konfigurationsdatei ein und fügen Sie Folgendes hinzu (ersetzen Sie Ihre AWS-Schlüssel):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Beachten Sie, dass die Git-Dateien in S3 privat sind, wenn Sie acl: public in der .jgit-Datei nicht angeben (was wir wollten). Erstellen Sie als Nächstes einen S3-Bucket, in dem Sie Ihr Repository speichern können. Nennen wir es git-repos und erstellen Sie dann ein git-Repository zum Hochladen:

s3cmd mb s3://git-repos
mkdir chef-recipes
cd chef-recipes
git init
touch README
git add README
git commit README
git remote add origin amazon-s3://.jgit@git-repos/chef-recipes.git

Oben verwende ich das Befehlszeilentool s3cmd, um den Bucket zu erstellen, aber Sie können dies auch über die Amazon-Weboberfläche tun. Lassen Sie es uns jetzt auf S3 hochschieben (beachten Sie, wie wir jgit verwenden, wenn wir mit S3 interagieren, und ansonsten Standard-git):

jgit push origin master

Gehen Sie jetzt woanders hin (zB cd / tmp) und versuchen Sie es zu klonen:

jgit clone amazon-s3://.jgit@git-repos/chef-recipes.git

Wenn es Zeit ist, es zu aktualisieren (da jgit Merge oder Pull nicht unterstützt), tun Sie dies in zwei Schritten:

cd chef-recipes
jgit fetch
git merge origin/master

2 Verwenden Sie ein FUSE-basiertes Dateisystem, das von Amazon S3 unterstützt wird

  1. Holen Sie sich ein Amazon S3-Konto!

  2. Herunterladen, kompilieren und installieren. (siehe Installationshinweise)

  3. Geben Sie Ihre Sicherheitsanmeldeinformationen (Zugriffsschlüssel-ID und geheimer Zugriffsschlüssel) mit einer der folgenden Methoden an:

    • Verwenden der Befehlszeilenoption passwd_file

    • Festlegen der Umgebungsvariablen AWSACCESSKEYID und AWSSECRETACCESSKEY

    • Verwenden einer .passwd-s3fs-Datei in Ihrem Home-Verzeichnis

    • Verwenden der systemweiten Datei / etc / passwd-s3fs

    • mach das

.

/usr/bin/s3fs mybucket /mnt

Das ist es! Der Inhalt Ihres Amazon-Buckets "mybucket" sollte jetzt lesbar / lesbar in / mnt sein

Riceball LEE
quelle
1
Ich habe diese Anweisungen befolgt, erhalte jedoch eine The request signature we calculated does not match the signature you provided. Check your key and signing methodFehlermeldung, wenn ich es versuche jgit push origin master. Irgendeine Idee, wie ich das zum Verschwinden bringen kann?
John
4
Warum würdest du nicht einfach Git benutzen? Dies scheint eine Menge zusätzlicher Arbeit / Zeug nur für ein einfaches Remote-Git-Repo auf aws ...
cmcculloh
1
Ich würde vorschlagen, diese (echte) Antwort zu aktualisieren, um mit einem post-receiveHook, der das überprüft, noch einen Schritt weiter zu gehen GIT_WORK_TREE. Sehen Sie hier für weitere Details. Am Ende funktionierte das ganz gut s3fs. Sehr zu empfehlen und danke, dass Sie mir beim Einstieg geholfen haben.
Bnjmn
1
@cmculloh Wenn Sie noch keine EC2-Instanz haben, kann dies mehr Probleme verursachen und langfristig kosten, nur um ein Git-Repo zu haben. Außerdem ist der S3-Speicher standardmäßig wesentlich langlebiger. Um die gleiche Haltbarkeit auf EC2
Jeremy
1
Es scheint, dass der Blog-Beitrag aktualisiert wurde, um die jgit-Projektseite mit dem Repository des egit [ eclipse.org/egit/] -Projekts zu verknüpfen, und das macht die gesamte Lösung 1 verwirrend. Nach ein wenig Suche konnte ich die ursprüngliche jgit-Projektseite finden, von der jgit.sh heruntergeladen und verwendet werden kann. Der Link ist eclipse.org/jgit/download für alle, die ihn in Zukunft benötigen.
MN Islam Shihan
9

Dandelion ist ein weiteres CLI-Tool, mit dem Git-Repositorys mit S3 / FTP / SFTP synchronisiert werden: http://github.com/scttnlsn/dandelion

scttnlsn
quelle
Keine Ahnung, wer das abgelehnt hat. Ich denke, diese Lösung ist gut, wenn das Ziel inkrementelle Bereitstellungen neben git für das lokale Versionsmanagement und S3 für das Hosting ist. Das scheint die Frage zu sein.
Tabrez
8

git-s3 - https://github.com/schickling/git-s3

Du musst nur rennen git-s3 deploy

Es bietet alle Vorteile eines Git-Repos und lädt / löscht nur die Dateien, die Sie geändert haben.
Hinweis: Bereitstellungen sind nicht implizit über Git-Push, aber Sie können dies über einen Git-Hook erreichen.

schickling
quelle
14
Zu Ihrer Information, das hängt davon ab Composer, was wiederum davon abhängt PHP.
Maarten
3

Sie können den mc aka Minio-Client verwenden , der in Golang geschrieben und unter der Open Source Apache-Lizenz verfügbar ist. Es ist für Mac, Linux, Windows, FreeBsd verfügbar. Sie können den mc mirrorBefehl verwenden, um Ihre Anforderung zu erfüllen.

mc GNU / Linux herunterladen

64-bit Intel from https://dl.minio.io/client/mc/release/linux-amd64/mc
32-bit Intel from https://dl.minio.io/client/mc/release/linux-386/mc
32-bit ARM from https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod +x mc
$ ./mc --help

Mc für Amazon S3 konfigurieren

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Ersetzen Sie durch Ihren Zugangs- / Geheimschlüssel
  • Standardmäßig verwendet mc die Signaturversion 4 von Amazon S3.
  • mys3 ist der Amazon S3-Alias ​​für den Minio-Client

Spiegeln Sie Ihr lokales Github-Repository / -Verzeichnis und sagen Sie den Namenmygithub zum Namen des Amazon S3- Bucketsmygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Hoffe es hilft Haftungsausschluss: Ich arbeite für Minio

koolhead17
quelle
3

Sie können dies auch mit der AWS CLI und Git (mit Hooks) tun. Verifiziertes Arbeiten unter Windows 10. Sollte unter Linux / Mac funktionieren.

Setup Sync mit S3 beim Festschreiben

  1. Installieren Sie AWS CLI
  2. Richten Sie programmgesteuerte IAM-Zugriffsdaten ein (Sie können sich auf S3 und sogar nur auf den Bucket beschränken).
  3. Konfigurieren Sie AWS CLI mit den Anmeldeinformationen
  4. Erstellen Sie den S3-Bucket in der AWS-Konsole oder in der CLI.
  5. Stellen Sie sicher, dass der Eimer privat ist.
  6. Erstellen Sie ein neues bareGit-Repo aus Ihrem vorhandenen Git-Projekt:
mkdir myproject.git
cd myproject.git
git init --bare

HINWEIS: Die Verwendung eines Bare-Repo dient als Upstream und das Bare-Repo enthält nur die Änderungen, die Sie in den S3-Bucket hochladen möchten, und nicht ignorierte Dateien, lokale Git-Konfigurationen usw.

  1. Installieren Sie diesen Haken wie post-updatein hooksder bloßen myproject.gitVerzeichnis.
    #!/bin/sh; C:/Program\ Files/Git/usr/bin/sh.exe
    # Sync the contents of the bare repo to an S3 bucket.
    aws s3 sync . s3://myproject/
    
  2. Aktualisieren Sie den Hook mit dem richtigen S3-Bucket-Namen.
  3. CD jetzt in dein myprojectVerzeichnis und füge das Bare Repo als Upstream hinzu, nenne es s3zum Beispiel:
git remote add s3 path/to/bare/directory/myproject.git 

HINWEIS: Sie können einen relativen Pfad für den Pfad zum Bare-Verzeichnis verwenden.

Testen

  1. Fügen Sie Ihrem Repo Änderungen hinzu und legen Sie fest.
  2. Übertragen Sie Ihre Änderungen in den s3Upstream, wenn Sie Änderungen mit Ihrem S3-Bucket synchronisieren möchten.
  3. Sie sollten sehen, dass die Änderungen mit dem von Ihnen angegebenen S3-Bucket synchronisiert werden. Sie können auch die Änderungen im S3-Bucket anzeigen, um zu überprüfen, ob alles funktioniert hat.

Verweise:

b01
quelle
Dies ist in Ordnung, wenn Sie AWS CLI und Git bereits installiert haben. Es setzt Git-Kenntnisse über Hooks voraus, dass Sie wissen, wie Sie IAM-Benutzer und programmatische Anmeldeinformationen einrichten und S3-Buckets erstellen.
b01
Verstehe ich also richtig, dass dies lokal zwei Repos hat und das nackte lokale Repo so eingerichtet ist, dass es sich nach dem Update mit s3 synchronisiert?
Josiah
@ Josiah Ja das ist richtig. Dies ist zwar nicht erforderlich, vereinfacht jedoch die Synchronisierung nur der gewünschten Dateien in S3, da das Bare-Repo nur festgeschriebene Dateien enthält. Ich habe dies ohne das bloße Repo versucht, aber dann musste ich einige Dateien von der Synchronisierung mit S3 ausschließen, merklich alles in der .gitignore-Datei.
b01
1

Sie können den Dienst deplybot ( http://deploybot.com/ ) verwenden, der für das Single-Git-Repository kostenlos ist.

Sie können die Bereitstellung automatisieren, indem Sie im Abschnitt Bereitstellungsmodus die Option "Automatisch" auswählen.

Ich benutze es jetzt. Es ist sehr einfach und nützlich.

Jayaprakash
quelle
Nicht mehr frei.
mxcl
-1

Versionskontrolle Ihrer Dateien mit Github? Dieses Skript (und die zugehörigen GitHub / AWS-Konfigurationen) übernimmt neue Commits für Ihr Repo und synchronisiert sie mit Ihrem S3-Bucket.

https://github.com/nytlabs/github-s3-deploy

Max Hodges
quelle
-1

Du brauchst JGit dafür.

Speichern Sie einfach eine .jgit-Datei im Benutzerverzeichnis mit aws-Anmeldeinformationen und Sie können git mit s3 verwenden.

So sieht deine Git-URL aus.

amazon-s3://.jgit@mybucket/myproject.git

Sie können alles , was Sie tun , tun gitmit jgit.

Eine vollständige Installationsanleitung erhalten Sie hier.

https://metamug.com/article/jgit-host-git-repository-on-s3.html

Sorter
quelle