I inherited a project originally stored in CVS with all the revisions. I made quite a few edits, and I\'m trying to compare all the changes I made in the original directory,
Creating the patch from dir1 to dir2 (--binary
only needed for binaries):
git diff --no-prefix --no-index --binary dir1 dir2 > dir.diff
Applying the patch to contents of working directory, which has the same contents as dir1:
cd dir1_copy
git apply ../dir.diff
git apply
has default -p1
which strips the leading directories in diff commands.
git diff
does exactly that. but it only works for git projects.
hg diff
, svn diff
pretty every version control system can diff directory trees
From git diff manpage:
git diff [--options] [--] [<path>...]
[...]
If exactly two paths are given, and at least one is untracked, compare the two files / directories. This behavior can be forced by--no-index
.
If you want to compare two versions (e.g. two tagged releases, or two branches) in two different repositories, you can use trick described in GitTips page on Git Wiki, under "How to compare two local repositories".
Assuming that you are inside one repository, and second repository is in /path/to/repo
, so its GIT_DIR is /path/to/repo/.git
if it is non-bare repository, you can something like the following:
$ GIT_ALTERNATE_OBJECT_DIRECTORIES=/path/to/repo/.git/objects \
git diff $(git --git-dir=/path/to/repo/.git rev-parse --verify A) B
where A and B are revisions you want to compare. Of course you can also specify path limiter in above expression.
Explanation: GIT_ALTERNATE_OBJECT_REPOSITORIES
variable can be used to make git commands concatenate object database of the two repositories. git --git-dir=... rev-parse ...
is used to turn name (extended SHA-1 expression) in repository given as parameter to git-dir
option into unique SHA-1 identifier. The $( ... )
construct puts result of calling given command in command line. git diff
is used to compare two revisions (where one is from alternate object repository).
Alternate solution would be to simply import other repository into given repository, using git remote add
(and git fetch
). Then you would have everything locally, and would be able to do comparision inside single repository.
I don't really understand what you want, but isn't diff -ur
enough for you? It will work even on directories without any kind of version control.
There Are Following Another Ways For Diffing between two entire directories/projects.
Syntax: git-diff [] [--] […] This form is to view the changes you made relative to the index (staging area for the next commit). In other words, the differences are what you could tell Git to further add to the index but you still haven’t.
Here is the. URL: https://git-scm.com/docs/git-diff
git diff --no-index directory 1 project /path directory 2 project/path >> File name
Using Linux Command diff --brief --recursive dir1path/ dir2Path/
If you are using windows there is an application WinMerge.
It's not git-specific, but as a general diff utility for Windows, I really like WinMerge.