J'ai hérité d'un projet initialement stocké dans CVS avec toutes les révisions. J'ai fait pas mal de modifications, et j'essaie de comparer toutes les modifications que j'ai apportées dans le répertoire d'origine, en ce qui concerne les nouveaux fichiers ajoutés par rapport aux anciens.
Existe-t-il une sorte d'utilité pour hg/git où je peux faire un diff d'arbre, ou quelque chose de cette nature? Donc cela dit, il y a une marque entre les fichiers nouvellement ajoutés, les fichiers supprimés, est-ce que j'en demande trop?
git diff
fait exactement cela. mais cela ne fonctionne que pour les projets git.
hg diff
, svn diff
à peu près tous les systèmes de contrôle de version peuvent différer les arborescences de répertoires
Pour créez simplement un patch diff au format diff de git à partir de deux fichiers ou répertoires arbitraires, sans aucun truc de référentiel ni contrôle de version:
git diff --no-index some/path other/path >> some_filename
Le commentaire de Jakub Narębski sur la réponse de knittl faisait allusion à la réponse ... Par souci de simplicité, c'est la pleine commande.
Le >>
part crée un fichier et y redirige la sortie. Si vous ne voulez pas de fichier et que vous voulez juste que la sortie soit imprimée dans votre console pour pouvoir le copier, supprimez simplement le >> some_filename
partie.
Pour un copier-coller pratique, si vous avez déjà cd
enregistré dans un répertoire contenant le répertoire/fichier d'origine nommé a
et le répertoire modifié b
, ce sera:
git diff --no-index a b >> patch
git diff [--options] [--] [<path>...]
[...]
Si exactement deux chemins sont indiqués et qu'au moins un n'est pas suivi, comparez les deux fichiers/répertoires. Ce comportement peut être forcé par--no-index
.
Si vous souhaitez comparer deux versions (par exemple deux versions marquées ou deux branches) dans deux référentiels différents, vous pouvez utiliser l'astuce décrite dans la page GitTips sur Git Wiki, sous "Comment comparer deux référentiels locaux" .
En supposant que vous êtes dans un référentiel et que le deuxième référentiel se trouve dans /path/to/repo
, Son GIT_DIR est donc /path/to/repo/.git
S'il s'agit d'un référentiel non nu, vous pouvez quelque chose comme ceci:
$ GIT_ALTERNATE_OBJECT_DIRECTORIES=/path/to/repo/.git/objects \
git diff $(git --git-dir=/path/to/repo/.git rev-parse --verify A) B
où A et B sont des révisions que vous souhaitez comparer. Bien sûr, vous pouvez également spécifier un limiteur de chemin dans l'expression ci-dessus.
Explication: La variable GIT_ALTERNATE_OBJECT_REPOSITORIES
Peut être utilisée pour que les commandes git concaténent la base de données d'objets des deux référentiels. git --git-dir=... rev-parse ...
Est utilisé pour transformer le nom (expression SHA-1 étendue) dans le référentiel donné en paramètre de l'option git-dir
En identifiant SHA-1 unique. La construction $( ... )
place le résultat de l'appel d'une commande donnée en ligne de commande. git diff
Est utilisé pour comparer deux révisions (où l'une provient d'un référentiel d'objets alternatif).
Une autre solution consisterait à simplement importer un autre référentiel dans un référentiel donné, en utilisant git remote add
(Et git fetch
). Ensuite, vous auriez tout localement et vous pourriez faire la comparaison à l'intérieur d'un référentiel unique.
Existe-t-il une sorte d'utilitaire pour hg/git où je peux faire un diff d'arbre ... [s] o qui dit, il y a une marque entre les fichiers nouvellement ajoutés, les fichiers supprimés ... [emphase ajoutée]
Oui. Nous pouvons git diff
le répertoire courant contre un autre répertoire et ...
... marquez les fichiers ajoutés, supprimés et modifiés:
git diff --name-status --no-index ./ path/to/other/dir
... n'afficher que les fichiers ajoutés:
git diff --diff-filter=A --name-status --no-index ./ path/to/other/dir
... n'afficher que les fichiers supprimés:
git diff --diff-filter=D --name-status --no-index ./ path/to/other/dir
... n'afficher que les fichiers modifiés:
git diff --diff-filter=M --name-status --no-index ./ path/to/other/dir
Voir aussi: https://git-scm.com/docs/git-diff
Je ne comprends pas vraiment ce que tu veux, mais n'est pas diff -ur
assez pour toi? Cela fonctionnera même sur les répertoires sans aucun type de contrôle de version.
Ce n'est pas spécifique à git, mais en tant qu'utilitaire de diff général pour Windows, j'aime vraiment WinMerge .