Je veux montrer une partie de mon travail en les téléchargeant sur mon compte GitHub. Cependant, certains fichiers contiennent des mots de passe, tels que les connexions à la base de données.
Existe-t-il un moyen de marquer un fichier comme étant inutilisable avec Git afin qu'il ne puisse pas apparaître sur GitHub?
Existe-t-il un moyen de marquer un fichier comme étant inutilisable avec Git afin qu'il ne puisse pas apparaître sur GitHub?
Premièrement, il n’existe aucun moyen d’afficher certains commits et commits dans votre référentiel Git local mais d’une manière ou d’une autre ne peut pas être visualisés dans GitHub; si vous avez un fichier validé dans Git, il apparaîtra dans GitHub.
Deuxièmement, il n’existe aucun moyen simple et pratique de marquer un fichier individuel comme étant "non gommable". Mais il existe définitivement un moyen d’ignorer un fichier dans un dépôt Git: ajouter le (s) fichier (s) (y compris le chemin relatif, si nécessaire) à un fichier .gitignore
:
Un fichier
.gitignore
spécifie les fichiers intentionnellement non suivis que Git doit ignorer. Les fichiers déjà suivis par Git ne sont pas affectés. voir les NOTES ci-dessous pour plus de détails.
Créer un .gitignore
de base est assez facile car il ne s’agit que d’un fichier texte brut. Ainsi, par exemple, si j'avais un fichier config.php
à la racine, vous le feriez; en supposant que vous utilisez PHP, mais le concept s'applique à n'importe quelle configuration. De plus, j'utilise Nano comme éditeur de texte dans cet exemple, mais n'hésitez pas à utiliser l'éditeur de texte que vous utilisez normalement pour cela:
nano .gitignore
Et ajoutez simplement ce nom de fichier à ce fichier:
config.php
Enregistrez-le et maintenant, Git ignorera simplement ce fichier.
Cela dit, ce que j'aime faire pour les configurations telles que celle-ci est de garder un exemple/exemple de configuration neutre des détails sensibles dans le référentiel afin que je sache ce que le format de fichier de configuration est un fichier nommé comme ceci:
config.SAMPLE.php
De cette façon, vous savez exactement comment le fichier config.php
doit être configuré via config.SAMPLE.php
et vous pouvez vous assurer que le config.php
actuel n'est jamais touché par Git.
De plus, si vous envisagez de montrer votre code, vous devez vous attendre à ce que quelqu'un essaye de le prendre et de le mettre en œuvre sur son propre système. Rappelez-vous, nous ne sommes pas vous et sans un exemple de fichier de configuration dans votre référentiel, les gens ne comprendront pas vraiment comment implémenter le code eux-mêmes. Ils pourraient même penser que vous n’êtes pas compétents parce que vous n’avez pas fourni d’exemple de configuration de base.
Vous pouvez également ajouter un crochet de pré-validation pour mettre en œuvre les contrôles de cohérence. Le répertoire .git/hooks
de chaque référentiel git contient des exemples de scripts.
Le script appelé pre-commit
est exécuté s'il existe avant chaque validation, et une valeur de retour non nulle annule la validation.
Par exemple, vous pourriez avoir un script simple comme ceci:
#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0
Et si cette filename
correspond, la validation échoue.
Ce que @JakeGould a dit Dans certains cas, vous pouvez également utiliser des bits de fichier spéciaux tels que skip-worktree
ou assume-unchanged
qui peuvent être définis de la manière suivante; pour les différences entre les deux, voir cette réponse au débordement de pile :
git update-index --assume-unchanged <file>
Ce qui cachera alors les modifications supplémentaires apportées à un fichier existant et que vous pourrez utiliser si vous voulez vraiment qu'un fichier soit présent après chaque extraction. Mais je vous conseillerais de ne l'utiliser que si vous savez vraiment ce que vous faites.
Utilisez un .gitignore
comme @JakeGould. En outre, quelques informations connexes:
.gitignore
empêche les fichiers d'être suivis; s'ils sont déjà suivis, utilisez git rm --cached
pour les supprimer$GIT_DIR/info/exclude
seront également ignorés~/.gitconfig
de l'utilisateur sont également ignorés.Voir la documentation officielle de Git pour plus de détails.
Pour étendre les réponses de Jake et 46: une très bonne pratique consiste à utiliser une extension cohérente pour les fichiers dans lesquels vous incluez des informations privées et à utiliser .gitignore
pour toujours exclure les fichiers portant cette extension de manière globale (en utilisant le fichier .gitconfig
comme indiqué ailleurs). toujours ignoré pour votre utilisateur).
De cette façon, vous pouvez avoir par exemple:
/projectname/mypasswords.exc
et si vous avez exclu *.exc
globalement, alors vous savez qu'il ne sera pas validé, même si vous oubliez d'exclure individuellement ce fichier.