185 votes

Avec git, comment puis-je ignorer un fichier dans une branche mais le faire valider dans une autre branche?

J'ai un projet que je suis le déploiement d' heroku. L'arborescence du code source, inclut un tas de fichiers mp3 (le site sera pour un projet d'enregistrement j'ai été fortement impliqué avec).

J'aimerais mettre le code source sur github, mais github a une limite de 300 MO sur leurs comptes gratuits. Je ne veux pas utiliser les 50 MO de ma limite sur un tas de fichiers mp3. Évidemment, je pourrais les ajouter à l' .gitignore le fichier pour les garder hors de mon repo.

Cependant, je déployer sur heroku l'aide d' git push heroku. Les fichiers mp3 doivent être présents dans la branche que j'ai push heroku de sorte qu'ils obtiennent est déployé.

Idéalement, j'aimerais .gitignore les fichiers mp3 dans mon local de la branche principale, de sorte que lorsque je pousse qu'à github, les mp3 ne sont pas inclus. Puis je garderais un local de la branche de production qui a les mp3 engage plutôt que de les ignorer. Pour déployer, je voudrais fusionner master en production, puis appuyez sur la branche de production à heroku.

Je ne peux pas obtenir ce travail à droite.

Voici un exemple de ce que je suis en train de faire...

$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored

À ce stade, Foo.ignoré est ignoré dans ma branche master, mais il est toujours présent, si mon projet peut l'utiliser.

$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

Maintenant, j'ai une branche avec ces fichiers engagés, comme je veux. Cependant, quand je revenir à ma branche master, Foo.ignoré, c'est parti.

De toute façon eu des suggestions pour une meilleure façon de le définir?

Edit: juste pour préciser, je veux que les fichiers mp3 présents dans les deux branches de sorte que lorsque je lance le site localement (à l'aide d'une branche) le site fonctionne. Je veux juste les fichiers ignorés dans une branche alors, quand je l'ai pousser à github ils ne sont pas poussés. Généralement .gitignore fonctionne bien pour ce genre de chose (c'est à dire garder une copie locale d'un fichier qui ne sont pas inclus dans une pousser à distance), mais lorsque je passe à la branche avec les fichiers archivés, puis à la direction générale avec les fichiers ignorés, les fichiers disparaissent.

85voto

Cognition.Mind Points 580

J'ai écrit un billet de blog sur la façon d'utiliser efficacement l' excludesfile pour les différentes branches, comme un public github et un pour heroku de déploiement.

Voici le rapide et sale:

$ git branch public_viewing
$ cd .git/
$ touch info/exclude_from_public_viewing
$ echo "path/to/secret/file" > info/exclude_from_public_viewing 

puis dans le .git/config fichier, ajoutez ces lignes:

[core]
excludesfile = +info/exclude


[local "public_viewing"]
excludesfile = +info/exclude_from_public_viewing

Maintenant, tout le mondial d'ignorer les choses est dans l' info/exclude le fichier et la branche est dans l' info/exclude_from_public_viewing

Espérons que ça aide!

http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches

14voto

David Dollar Points 2138

Je conseillerais fortement d’envisager de placer ces fichiers MP3 sur S3. En les intégrant à votre poussée Heroku (et donc à votre limace Heroku), vous ralentirez considérablement le temps de démarrage de votre dyno. Etant donné que Heroku utilise EC2, si les fichiers sont sur S3 et que votre application n’y accède que (si les utilisateurs ne sont pas directement liés à S3), vous ne paierez même pas de frais de bande passante, seulement les frais de stockage de 50 Mo.

5voto

kEND Points 953

Avez-vous essayé d'avoir .gitignore différent dans votre branche?

Vous devriez pouvoir ignorer ce que vous voulez en fonction de la branche dans laquelle vous vous trouvez, tant que les fichiers ne sont pas suivis sur cette branche.

0voto

Tom Points 5641

Pouvez-vous commettre et pousser de Heroku?

Par exemple, ajoutez l'audio, poussez-les vers github et dans heroku, supprimez les fichiers de la copie de travail sur Heroku. Supprimez l'audio du référentiel mais pas du disque, puis repoussez cette modification sur github.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X