2011-10-03 3 views
3

je voulais exclure un fichier appelé config/dbconfig.js dans ma branche publique que j'utilise pour pousser à github, mais encore capable de pousser de maître à mon repo git noester.com à pousser à la production. J'ai changé le fichier de configuration à ceci:Git Config excludesfile pour juste une branche

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    excludesfile = +info/exclude 
[remote "nodester"] 
    url = *** My Git Repo *** 
    fetch = +refs/heads/*:refs/remotes/nodester/* 
[branch "public"] 
    excludesfile = +info/exclude_public 

Je me suis assuré de supprimer le fichier .gitignore et je suis en utilisant le .git/info/exclure fichier pour les généraux et les exclut espérais utiliser le .git/info/exclude_public pour exclure ce fichier alors quand je fusionne au public ce fichier ne fusionne pas aussi bien que ne pousse pas vers github.

Si je fais ce qui suit, il sera toujours ajouter le fichier à git même dans la branche publique. Donc, je pense que j'ai la syntaxe erronée ou ce n'est pas possible.

$ git checkout public 
$ git add . 
$ git status 
# On branch public 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: config/dbconfig.json 
# 

Si cela est impossible est-il une meilleure façon de traiter avec la base de données configs vous ne voulez pas sortir sur un projet Github ouvert sans exécuter deux référentiels git et fusionner manuellement entre eux?

Répondre

2

Pour les fichiers de configuration, il est préférable de traiter avec les pilotes de filtre de contenu plutôt que d'essayer d'ignorer un fichier pour certaines branches.

content filters

vous devez:

  • magasin un modèle de fichier de configuration
  • stocker les valeurs publiques
  • laisser un script de filtrage de contenu « smudge » construire le fichier de configuration cible sur le modèle et valeurs publiques,
    ... sauf quand ce script détecte qu'il est sur l'environnement de déploiement, auquel cas il utiliserait des valeurs d'une autre source sur ce serveur (et non des valeurs publiques stockées dans le repo)

Voir l'exemple:

+0

Ok je pense que je l'ai donc quelque chose comme ça dans les .gitattributes? config/dbconfig.json fusion = nous – JTWebMan

+0

@JTWebMan: un pilote de fusion peut fonctionne aussi, mais mon point avec un pilote de filtre est d'utiliser des valeurs provenant de l'extérieur du repo. – VonC

+0

Alors sur ma machine? Je pense que je reçois ce que votre disent quand je commets des changements, il se penchera sur quelle branche et remplacer les valeurs d'un fichier que j'ai localement qui ne sont pas dans la prise en pension. Cela fonctionnera-t-il aussi pour les fusions? – JTWebMan