Ich habe ein Projekt, das ich für Heroku bereitstelle . Der Quellcodebaum enthält eine Reihe von MP3-Dateien (die Website ist für ein Aufnahmeprojekt vorgesehen, an dem ich stark beteiligt war).
Ich möchte den Quellcode dafür auf GitHub veröffentlichen , aber GitHub hat ein Limit von 300 MB für seine kostenlosen Konten. Ich möchte nicht 50 MB meines Limits für eine Reihe von MP3-Dateien verwenden. Natürlich könnte ich sie der .gitignore
Datei hinzufügen , um sie aus meinem Repo herauszuhalten.
Ich stelle jedoch Heroku mit bereit git push heroku
. Die MP3-Dateien müssen in dem Zweig vorhanden sein, den ich an Heroku weitergebe, damit sie bereitgestellt werden.
Im Idealfall möchte ich .gitignore
die MP3-Dateien in meinem lokalen Master-Zweig verwenden, damit die MP3s nicht enthalten sind, wenn ich sie an GitHub übertrage. Dann würde ich eine lokale Produktionsniederlassung behalten, in der die MP3s festgeschrieben und nicht ignoriert werden. Für die Bereitstellung würde ich den Master in die Produktion einbinden und dann den Produktionszweig nach Heroku verschieben.
Ich kann das nicht richtig zum Laufen bringen.
Hier ist ein Beispiel dafür, was ich versuche zu tun ...
$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored
Zu diesem Zeitpunkt wird Foo.ignored in meinem Hauptzweig ignoriert, ist aber immer noch vorhanden, sodass mein Projekt es verwenden kann.
$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"
Jetzt habe ich einen Zweig mit diesen Dateien festgeschrieben, wie ich will. Wenn ich jedoch wieder zu meinem Hauptzweig wechsle, ist Foo.ignored nicht mehr vorhanden.
Hat jemand Vorschläge für eine bessere Einrichtung?
Bearbeiten: Zur Verdeutlichung möchte ich, dass die MP3-Dateien in beiden Zweigen vorhanden sind, damit die Site funktioniert, wenn ich die Site lokal ausführe (mit beiden Zweigen). Ich möchte nur, dass die Dateien in einem Zweig ignoriert werden. Wenn ich auf GitHub pushe, werden sie auch nicht gepusht. Normalerweise funktioniert .gitignore gut für diese Art von Dingen (dh eine lokale Kopie einer Datei, die nicht in einem Push auf eine Fernbedienung enthalten ist), aber wenn ich mit eingecheckten Dateien zum Zweig wechsle und dann zurück zum Verzweigen Sie mit den Dateien ignoriert, die Dateien verschwinden.
Antworten:
Ich habe einen Blog-Beitrag darüber geschrieben, wie man das effektiv
excludesfile
für verschiedene Zweige nutzt , wie einen für öffentliche Githubs und einen für die Heroku-Bereitstellung.Hier ist das schnelle und schmutzige:
Fügen Sie dann in der Datei .git / config die folgenden Zeilen hinzu:
Jetzt befindet sich das gesamte globale Ignoriermaterial in der
info/exclude
Datei und der branchenspezifische in der Dateiinfo/exclude_from_public_viewing
Hoffentlich hilft das!
http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches
quelle
git init
, ...), und die von Ihnen verwendete Version von Git bereitzustellen?Wichtiger Hinweis : Die von Cognition.Mind akzeptierte Antwort funktioniert nicht mehr (seit einigen Jahren nicht mehr oder vielleicht für Vanille-Versionen von Git). siehe die Kommentare. Eine gültige Antwort und Problemumgehung finden Sie hier:
https://stackoverflow.com/a/29583813/2157640
Eine andere alternative Problemumgehung (für mein spezielles Problem arbeiten, aber manuelle Stash-Operationen oder die Implementierung eines Hooks erfordern) wäre
git stash -u -a
. Dies ist mühsam, wenn die Unterschiede groß sind.Und schließlich besteht die Lösung, mit der ich jetzt arbeite, darin, meine VM, in der wir unsere Entwicklungsumgebung halten, zu
info/excludes
verzweigen und entsprechend für den Zweig einzurichten bzw. die fehlerhaften, nicht festgeschriebenen Dateien / Ordner zu löschen.quelle
Ich würde dringend empfehlen, diese MP3-Dateien auf S3 zu stellen. Wenn sie Teil Ihres Heroku-Pushs (und damit Teil Ihrer Heroku-Schnecke) sind, wird die Startzeit Ihres Prüfstands erheblich verlangsamt. Da Heroku EC2 verwendet, zahlen Sie nicht einmal Bandbreitengebühren, sondern nur die Gebühr für die Speicherung von 50 MB, wenn sich die Dateien in S3 befinden und nur von Ihrer App aufgerufen werden (wenn Benutzer nicht direkt mit S3 verbunden sind).
quelle
Angenommen, wir möchten den
build
Ordner aller anderen Zweige außer demproduction
Zweig ignorieren . Da wollen wirbuild
Ordner in der Produktion pushen .1)
build
Nicht in .gitignore aufnehmen. Wenn Sie dies tun, wird es immer für alle Zweige ignoriert.2) Erstellen Sie eine Datei
exclude_from_public_viewing
im./.git/info
Ordner (Dieser Ordner existiert bereits)touch ./.git/info/exclude_from_public_viewing
3)
exclude_from_public_viewing
Schreiben Sie innen eine Zeile (da Sie versuchen,build
alle Zweige zu ignorieren ).!build
4) Es ist eine Datei vorhanden
.git/info/exclude
. Wir müssen die folgende Zeile hinzufügen.Wir möchten den
build
Ordner ignorieren, haben ihn jedoch nicht in .gitignore hinzugefügt. Also, woher weiß Git, was zu ignorieren ist? Die Antwort ist, dass wir es derexclude
Datei hinzufügen und diese Datei unter bestimmten Bedingungen an übergebengit config
5) Jetzt müssen wir den
build
Ordner für dieproduction
Verzweigung bedingt aufheben . Führen Sie dazu folgende Schritte aus6) Es gibt eine vorhandene Datei mit dem Namen, die
./.git/config
wir hinzufügen müssen:a)
excludesfile = +info/exclude
unten[core]
b) Erstellen Sie am Ende von
./.git/config
as einen neuen AbschnittEs gibt eine intelligente alternative Lösung. Nehmen wir an, Sie möchten einen
build/
Ordner zumproduction
Zweig hinzufügen und ihn in allen anderen Zweigen ignorieren.1) Fügen Sie es Ihrer
gitignore
Datei hinzu.2) Erzwingen Sie dabei im Produktionszweig das
git add
Hinzufügen einesbuild
Ordners:git add -f --all build/
quelle
branch.<name>.excludesfile
in git (mehr?) Keine Unterstützung mehr gibt, nur fürcore.excludesfile
, und meine eigenen Tests schienen dies zu bestätigen.git version 2.7.4 (Apple Git-66)
und ich habe nichtbranch.<name>.excludesfile
in meiner Lösung verwendet.Haben Sie versucht, .gitignore in Ihrer Branche anders zu machen?
Sie sollten in der Lage sein, basierend auf dem Zweig, in dem Sie sich befinden, zu ignorieren, was Sie möchten, solange die Dateien in diesem Zweig nicht verfolgt werden.
quelle
1. Zusammenfassung
Ich füge hinzu
.travis.yml
:Wobei
misc
- jeder Ordner einen anderen enthält.gitignore
.mv
UNIX-Befehl Datei verschieben; überschreiben, wenn die Datei bereits vorhanden ist.Wenn Travis CI ein Projekt bereitstellt, wird Travis CI nicht auf die Bereitstellung von Provider- Dateien und -Ordnern drängen , die ignoriert werden
misc/.gitignore
(nicht im Original.gitignore
der Quellen).2. Einschränkungen
3. Relevanz
Diese Antwort ist für April 2018 relevant. In Zukunft sind die Daten dieser Antwort möglicherweise veraltet.
4. Demonstration
mein echtes Projekt .
Beispiel für eine erfolgreiche Bereitstellung .
4.1. Aufgabe
Ich stelle mein Projekt vom src-Zweig zum dest-Zweig desselben Repositorys bereit.
Ich möchte, diese Datei
PaletteMira.suricate-profile
:Wenn ich den Autor der Frage richtig verstanden habe, hat er eine ähnliche Aufgabe.
4.2. src
Quellen Zweig - SashaYAML .
Teil von
.travis.yml
:Teil von
.gitignore
:Teil von
misc/.gitignore
*.suricate-profile
nicht inmisc/.gitignore
.PaletteMira.suricate-profile
existiert in diesem Zweig nicht remote, sondern lokal.4.3. dest
Zielzweig - SashaDevelop
Teil von
.gitignore
:*.suricate-profile
nicht inmisc/.gitignore
.PaletteMira.suricate-profile
existiert für diesen Zweig remote und lokal.4.4. Schritte zum Reproduzieren
Ich aktiviere das PaletteMira GitHub-Repository für Travis CI → Ich setze die Umgebungsvariable
$GITHUB_TOKEN
mit dem Wert - meinem GitHub-Token → Ich mache ein Commit für meinen src-Zweig.Wenn keine Fehler vorliegen, muss ich das erwartete Verhalten erhalten .
quelle
Können Sie Heroku verpflichten und drängen?
zB Fügen Sie das Audio hinzu, schieben Sie es auf Github und in Heroku, entfernen Sie die Dateien auf der Arbeitskopie auf Heroku. Entfernen Sie das Audio aus dem Repo, aber nicht von der Festplatte, und drücken Sie diese Änderung zurück auf Github.
quelle
Github unterstützt jetzt die Speicherung großer Dateien. Weitere Informationen finden Sie hier https://git-lfs.github.com/
quelle