J'utilise git pour synchroniser avec phonegap lors des tests sur le navigateur natif du téléphone. En tant que tel, j'ai la ligne suivante:
var isPhoneGap = false;
Évidemment, je change cela lors de la construction, mais y a-t-il un moyen de configurer git pour ignorer cette ligne ou dois-je aller le mettre dans son propre fichier et l'ignorer de cette façon?
J'utilise Gitx et le terminal sous OSX 10.6.
Réponses:
Si votre fichier est d'un type spécifique, vous pouvez déclarer un pilote de filtre de contenu , que vous pouvez déclarer dans un
.gitattributes
fichier (comme présenté dans le "Développement de mots clés" de " Attributs Git "):(vous pouvez même définir ce filtre pour un fichier spécifique , si vous le souhaitez)
Mettre en place:
yourFilterName.smudge
(déclenché surgit checkout
) etyourFilterName.clean
(déclenché legit add
)Votre fichier apparaîtrait inchangé le
git status
, mais sa version extraite aurait la bonne valeur pourisPhoneGap
.la source
git diff or
statut git, mais ignorez les filtres? Donc je peux encore voir ce qui est différent? Mon cas d'utilisation concerne les journaux de débogage ... que je veux finalement supprimer ... @jthill @VonCsh ".git/helper.sh"
en m'assurant de passer tous les paramètres à sed avec"$@"
(je suppose que seul le chemin du fichier est passé).Vous pouvez utiliser
pour ignorer les modifications d'un fichier que vous ne voulez pas suivre. J'utilise cette solution lorsque j'ai besoin d'avoir un fichier dans le référentiel, mais ce fichier a des parties qui changent que je n'ai pas toujours besoin de suivre.
Lorsque le fichier comporte des modifications importantes, vous devez procéder comme suit:
Consultez également l' index de mise à jour de la documentation Git pour le
--[no-]assume-unchanged
paramètre.la source
--skip-worktree
c'est une meilleure option dans la plupart des cas. stackoverflow.com/a/39583010/4233593git commit -a
est libre de valider ce changement). »Gitx devrait vous permettre de valider ou d'ignorer des lignes individuelles (vous le savez peut-être déjà), mais vous devrez le faire à chaque fois que vous vous engagez. Je pense qu'il serait préférable d'avoir un fichier de configuration par cible de déploiement (vous pouvez les version), et un paramètre d'exécution pour la façon dont vous démarrez le serveur (comme
./myserver --config=whatever.js
).la source
Poursuivant https://stackoverflow.com/a/20574486/4935114 , @Mike a proposé de créer un
pre-commit
hook qui se trouveragrep
dans les fichiers intermédiaires pour les lignes que l'on pourrait vouloir ignorer. Le hook vérifie si ces lignes ont été mises en scène. Si c'est le cas, c'estecho
un avertissement et c'estexit
avec du code1
donc le processus de validation ne se poursuit pas.Inspiré par la réponse de @ Mike , je me suis retrouvé à utiliser peut-être une version améliorée de son hook qui s automatiquement
reset
(avec le-p
drapeau) la ligne spécifique que nous voulons ignorer.Je ne suis pas sûr que ce hook fonctionnera dans une situation où vous avez de nombreux fichiers avec cette ligne à ignorer, mais ce
pre-commit
hook recherche un changement dans cette ligne dans un fichier spécifiquebuildVars.java
. Le script de hook ressemblait à ceci lorsque je l'ai testé sur ma machine.Explication
Ce que j'ai fait, c'est faire écho à des séquences de contrôle qui recherchent l'expression régulière
isPhoneGap
pendant unreset
processus interactif . Émulant ainsi un utilisateur qui appuie sur/
pour rechercherisPhoneGap
, appuiey
lorsqu'on lui demande s'il veut supprimer ce patch et enfin appuie surq
pour quitter l'interactifreset
.Le processus de patch inversé interactif est documenté ici: https://git-scm.com/docs/git-add#git-add-patch
REMARQUE: le script ci-dessus en supposant que la variable
interactive.singleKey
estfalse
. Si vous avez configuré le vôtre surtrue
, supprimez-en un$'\n'
de laecho
commande juste après l'avertissement.la source
Voici comment vous pouvez le faire avec les filtres git :
OU
*.rb filter=gitignore
, c'est-à-dire exécuter le filtre nommégitignore
sur tous les*.rb
fichiersgitignore
filtre dans votregitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
, ie supprimer ces lignes$ git config --global filter.gitignore.smudge cat
, c'est-à-dire ne rien faire lors de l'extraction du fichier du référentielRemarques:
Bien sûr, cela concerne les fichiers ruby, appliqués lorsqu'une ligne se termine par
#gitignore
, appliqués globalement dans~/.gitconfig
. Modifiez ceci selon vos besoins.Avertissement!!
Cela laisse votre fichier de travail différent du dépôt (bien sûr). Tout retrait ou rebasage signifiera que ces lignes seront perdues! Cette astuce peut sembler inutile car ces lignes sont perdues à plusieurs reprises lors de l'extraction, du rebase ou de l'extraction, mais j'ai un cas d'utilisation spécifique pour l'utiliser.
Juste
git stash save "proj1-debug"
pendant que le filtre est inactif (désactivez-le temporairementgitconfig
ou quelque chose). De cette façon, mon code de débogage peut toujours êtregit stash apply
ajouté à mon code à tout moment sans craindre que ces lignes ne soient jamais commises accidentellement.J'ai une idée possible pour résoudre ces problèmes, mais je vais essayer de la mettre en œuvre une autre fois.
Merci à Rudi et jw013 pour avoir mentionné les filtres git et gitattributes.
la source
Un pilote de filtre de contenu n'est pas une bonne solution. Vous pourrez peut-être masquer cette ligne de
git status
/ etc mais elle n'est pas vraiment ignorée. Dès que vous modifiez la valeur, votre répertoire de travail sera marqué comme sale même si la modification peut ne pas être visible.Si vous voulez vraiment que cette ligne ne fasse pas partie du contrôle de version, la remplacer par un argument de ligne de commande ou la placer dans un fichier d'inclusion ou de construction ignoré peut être le seul moyen pratique.
la source
J'imagine que cela pourrait être quelque chose qui apparaît dans plus d'une ligne de votre source.
Je pense qu'il serait plus propre d'avoir un fichier .userbuildconfig d'une certaine sorte que vous incluez simplement et que les valeurs par défaut soient enregistrées. Ensuite, vous pouvez utiliser la suggestion de Carlos pour marquer ce fichier seul comme supposé inchangé. De cette façon, les autres modifications apportées au fichier pour lesquelles vous devez vérifier le paramètre ne sont pas manquées.
Cela peut vous permettre de régler les macros de préprocesseur localement (ou pour java quelque chose comme ceci https://stackoverflow.com/a/1813873/1270965 ).
la source
Nan. Vous ne pouvez ignorer que des fichiers individuels (et plus) car les lignes dans .gitignore correspondent aux noms de fichiers et non au contenu des fichiers. Vous avez déjà mentionné la solution à ce problème, c'est-à-dire ignorer un seul fichier contenant ce contenu que vous souhaitez ignorer.
la source