2011-01-31 4 views
3

J'ai ce fichier. disons x pour cet exemple dans le dossier y. Je veux mettre un bout dans le répertoire (P.S: je crois que this github project fait réellement ce que je veux), mais seulement une fois. Pour cet exemple, il ressemble à ceci:seulement inclure le fichier une fois dans le dépôt git

module.exports.id = ""; 
module.exports.secret = ""; 
module.exports.callback = ""; 

Ces valeurs ne doivent pas être partagés, c'est pourquoi je veux seulement mettre le fichier (talon/vide) à l'intérieur du dépôt une fois.

Lorsque je modifie à nouveau x, les modifications ne doivent pas être placées dans le référentiel git, mais uniquement dans le répertoire y.

J'espère que j'ai du sens et que ce n'est pas non plus une question en double. Si c'est le cas j'aimerais connaître le sujet de stackoverflow qui discute ceci, de sorte que je puisse fermer ce sujet.

+0

Avez-vous essayé les liens symboliques? – Amber

+0

Vous voulez dire quoi? pourriez-vous donner un exemple s'il vous plaît. Postez-le comme une réponse peut-être? – Alfred

Répondre

5

je l'ai résolu de la manière suivante: renommer le fichier x-x-default et git mis à ignorer le fichier x (par exemple, par un .gitignore dans la dir y.). Chaque utilisateur qui vérifie le repo doit copier le fichier extrait x-default à x et définir ses valeurs.

Ceci a l'avantage, que le fichier x-default peut être mis à jour avec de nouvelles valeurs sans problème (pas écraser la configuration de l'utilisateur) et à cause de x est ignoré, ne sont pas synchronisés les valeurs de l'utilisateur avec les prises en pension d'autres utilisateurs (comme vous voulez).

Votre programme doit vérifier l'existence de x et, sinon là, donner une indication de copier x-default-x et le configurer (ou faire automatiquement).


Modifier

Cela fonctionne, mais je crois qu'il peut être fait plus propre.

Dépend de ce que vous voulez. Vous pouvez également l'utiliser sur votre pension locale:

git update-index --assume-unchanged x 

Vous commettras une fois le fichier, puis exécutez la commande sur le fichier si vous ne voulez pas d'autres changements à commettre. Le problème ici est que les autres utilisateurs devront faire la même chose une fois s'ils veulent l'avoir comme vous, sinon leurs changements seront validés (et écraseront les vôtres ou cela se terminera dans un conflit de fusion).

Pour annuler, il suffit d'aller

git update-index --no-assume-unchanged x 

Je ne suis pas au courant d'une autre solution, mais peut-être quelqu'un d'autre.


Modifier

P.S: Je crois que ce projet github ne fait ce que je veux

Ce plus ressemble à ma première réponse!Ils ont un fichier example_keys_file.js et dans le fichier .gitignore ils ignorent keys_file.js.

+0

Cela fonctionne, mais je crois que cela peut être fait plus propre. Je mets à jour ma question pour montrer la référence à github pourquoi je parie l'utilise. Peut-être que je lui demande en envoyant un courriel. – Alfred

+0

Je crois que vous avez raison sur votre partie inférieure p.s (oops: $). à l'intérieur de 'examples/app.js' il utilise à la place' var example_keys = require ('./ keys_file'); '. Je suppose que je vais accepter votre réponse dans quelques heures si cela ne vous dérange pas. Je voudrais lui donner plus de temps pour voir si quelqu'un d'autre a une meilleure solution. – Alfred

+1

Eh bien, pas besoin de se dépêcher d'accepter une réponse - s'il y a une meilleure solution, je veux le savoir aussi! Mais je ne peux pas penser à un autre, car cela rendrait les choses vraiment compliquées (avoir un fichier * juste la moitié * dans un repo). – Markus

2

L'approche standard à ce problème est:

  1. Mettez template.ext.in dans votre dépôt
  2. Demandez à votre makefile/script/copier manuellement template.ext.in-template.ext et modifier les valeurs
  3. ajouter à votre template.ext .gitignore pour s'assurer qu'il ne soit jamais engagé.
+0

Yup cela pourrait également fonctionner, mais je crois que cela peut être fait plus propre parce que connect-auth contient ce talon. P.S: J'ai mis à jour ma question pour avoir une référence à ceci en retard: $. – Alfred

+0

Ce fichier référencé dans 'connect-auth' est sous le contrôle de version, ce qui signifie que vous risquez de le valider accidentellement après la modification. Vous ne pouvez pas l'avoir dans les deux sens: soit vous faites le travail pour copier un modèle, soit vous risquez un commit accidentel. '.gitignore' n'ignorera pas un fichier qui est déjà sous contrôle de version. –

Questions connexes