2010-03-19 7 views
8

Kann man bestimmte Dateien (* .ai, * .psd) ausschließen, wenn man mit Git auf bestimmte Repositories pusht?Bestimmte Dateien ausschließen, wenn auf ein bestimmtes Git-Repository gedrängt wird

Mein Bedarf kommt aus dem Versuch, Git sowohl für die Versionskontrolle als auch für die Bereitstellung auf Heroku zu verwenden. Wenn ich meine Grafikelemente in die Bereitstellung einbeziehe, ist die Größe des Slugs größer als gewünscht. Ich muss jedoch alle Projektdateien in mein Hauptverzeichnis github aufnehmen.

+0

Es gibt keine einfache Möglichkeit, dies zu tun. Vielleicht hilft diese Antwort: http://stackoverflow.com/questions/2454661/heroku-and-github-integration-how-to-structure-the-project/2454778#2454778 – mckeed

+0

Danke für den Kommentar. Ich denke, ich muss nur eine Arbeit (Hack) finden. –

Antwort

12

Der einfache Weg, um Ihr tatsächliches Problem zu lösen, ist eine .slugignore Datei im Stammverzeichnis des Repositorys zu erstellen, das Dateien auflistet, die nicht in den Slug gepackt werden sollen.

+0

genial! Das hilft mir sehr. danke – stephenmurdoch

+1

Danke! Genau das habe ich gebraucht! –

4

Sie können einen zweiten Zweig für die Bereitstellung bei Heroku verwalten, der keine dieser Dateien enthält, aber immer noch vom Master zusammengeführt wird. (Natürlich müssen Sie ein System für die Auflösung der Zusammenführungskonflikte erarbeiten, die Sie erhalten, wenn Sie die .ai und .psd Akten im Meister ändern).

Die spezifische Sache, die Sie fragen, ist unmöglich, aus dem einfachen Grund, dass wenn Sie drücken, übertragen Sie die genauen Commits von einem Repository zum anderen, und zwei Commits, die nicht den gleichen Baum haben per Definition unterschiedliche commits.

Tipp: Die neuesten Versionen von git haben eine --porcelain Option für git status, die zu analysieren gibt einfach Informationen wie „M file1“ „DU file2“ (modifiziert und unmerged/von uns gelöscht, respectively). Sie könnten einen git-merge-Wrapper für die Bereitstellung Zweig schreiben, die die Zusammenführung versucht, und bereinigt automatisch die zu erwartenden Konflikte:

git checkout deploy 
if ! git merge master; then 
    git rm $(git status --porcelain | awk '/^DU/ {print $NF}') 
fi 

(Der Grund, warum ich $NF statt $2 gedruckt ist, dass, wenn die Datei umbenannt, es‘ ll aussehen wie "DU original_name -> new_name", und die in den Arbeitsbaum platzierte Kopie wird new_name, nicht original_name.)

Natürlich könnte das Skript komplexer werden, wenn Ihre Situation ist - Sie könnten nur suchen bestimmte Erweiterungen (fügen Sie sie dem einschränkenden awk-Muster hinzu), oder erfassen Sie sogar die gesamte Ausgabe in einem Perl-Skript, so dass Sie leicht mehr Phantasie Logik ...

+0

Kann ich separate Ausschlussdateien für verschiedene Zweige haben? Muss ich zwei Projekte auf meinem lokalen Computer erstellen? Vielen Dank. –

+0

Sie brauchen nicht zwei Repositories für zwei Zweige - das ist einer der Hauptvorteile von etwas wie git. Verzweigen und Zusammenführen sind wirklich einfach. Und ja, Sie können verschiedene .gitigignores für verschiedene Zweige haben (es ist schließlich nur eine verfolgte Datei im Repository!), Aber denken Sie daran, dass Gitignores nicht für Dateien gedacht sind, die bereits nachverfolgt werden - sie dienen dazu, Sie daran zu hindern Dinge (wie Bauobjekte), die noch nicht festgeschrieben sind. – Cascabel

+0

Ah, OK Ich muss noch etwas mehr über GIT lesen (ich bin ein SVN-Benutzer, der versucht, umzuschalten). Danke für den Hinweis. –

3

Es gibt keine direkte einfache Möglichkeit, das zu tun. Es ist sicherlich überschaubar, aber mit einer Menge Schmerzen (git war nicht dafür ausgelegt).

Es wäre wahrscheinlich einfacher, wenn Sie Heroku bitten, einige Dateien von der Bereitstellung auszuschließen.

+0

Ja, ich liebe die Hosting-Lösung im Allgemeinen, mit Ausnahme dieser Funktion. Ich werde versuchen, den YouTubern eine Notiz zu schicken und zu sehen, ob sie irgendwelche Funktionen auf dem Weg haben. –

+0

Es scheint, dass dies bereits möglich ist, nach John Topley's Antwort. – hasen

Verwandte Themen