(git) diff output relative path?
Solution 1
Seems like --src-prefix
and --dst-prefix
are what you're asking for:
$ cd .../git/builtin
$ ed - var.c << end
> 0a
> xxx
> .
> wq
> end
$ git diff
diff --git a/builtin/var.c b/builtin/var.c
index aedbb53..5210013 100644
--- a/builtin/var.c
+++ b/builtin/var.c
@@ -1,3 +1,4 @@
+xxx
/*
* GIT - The information manager from hell
*
(so far, pretty standard; now:)
$ git diff --src-prefix=a/new/ --dst-prefix=b/new/
diff --git a/new/builtin/var.c b/new/builtin/var.c
index aedbb53..5210013 100644
--- a/new/builtin/var.c
+++ b/new/builtin/var.c
@@ -1,3 +1,4 @@
+xxx
/*
* GIT - The information manager from hell
*
You can combine this with --relative
:
$ git diff --relative --src-prefix=a/new/ --dst-prefix=b/new/
diff --git a/new/var.c b/new/var.c
index aedbb53..5210013 100644
--- a/new/var.c
+++ b/new/var.c
@@ -1,3 +1,4 @@
+xxx
/*
* GIT - The information manager from hell
*
$
Solution 2
git diff
prints paths (of changed files) from the root of the repo - no matter where you are when executing the command.
git diff --relative
will print paths from the dir you are in.
So if you need paths not starting from the repo-root move down (cd) to the directory (within your repo tree) where you with your paths to start from.
Related videos on Youtube
user318904
Updated on June 16, 2022Comments
-
user318904 almost 2 years
I need to get some diffs in my repo that are not relative to the base of the repo, but instead relative to a given base or given path.
By default I get:
git diff diff --git a/path/to/file b/path/to/file index 0cc125e..9bf911e 100644 --- a/path/to/file +++ b/path/to/file
But what I want is something like:
git diff --prefix=/new/path/to diff --git a/new/path/to/file b/new/path/to/file index 0cc125e..9bf911e 100644 --- a/new/path/to/file +++ b/new/path/to/file
I have looked over the --relative option (not what I am looking for), the --src/dst-prefix (these can only change the "a" or "b" parts. Am I missing something basic?
-
Anshul Goyal about 10 yearsAre they both relative to some part of repo? if not, why not use vimdiff or meld instead?
-
-
user318904 about 10 yearsI think this is correct, I never thought to try both of them of course..I hate porting patches.
-
Lilás over 6 years
--relative
was exactly what I needed when I was usinggit diff --name-only
, thanks -
Andy Stewart almost 4 years
--relative
excludes changes outside the current directory. -
Antarctica over 3 yearsYou seem to have an in-depth knowledge of git (I read some your answers). Do you have some resources to recommend?
-
torek over 3 years@Antarctica: I've been using (and recently, contributing slightly to) Git for well over a decade. I don't have any single thing I'd specifically recommend at this point, but if you're looking for a decent book on Git, the Pro Git book has a bunch of plus-es: it's on line and kept up to date, it's free, and it's correct (unlike far too many online tutorials). There is also Think Like (a) Git, which covers most of what's missing from Pro Git.
-
Robert almost 2 yearsYou can make relative paths the default with
git config --global diff.relative true
for all your repositories; drop the--global
to only use it for the current repository.