git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Start deprecating "git-command" in favor of "git command"

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Jun 30, 2007, 18:49 UTC
Message-ID
<alpine.LFD.0.98.0706301135300.1172@woody.linux-foundation.org>

I realize that a lot of people use the "git-xyzzy" format, and we have various historical reasons for it, but I also think that most people have long since started thinking of the git command as a single command with various subcommands, and we've long had the documentation talk about it that way.

Slowly migrating away from the git-xyzzy format would allow us to eventually no longer install hundreds of binaries (even if most of them are symlinks or hardlinks) in users $PATH, and the _original_ reasons for it (implementation issues and bash completion) are really long long gone.

Using "git xyzzy" also has some fundamental advantages, like the ability to specify things like paging ("git -p xyzzy") and making the whole notion of aliases act like other git commands (which they already do, but they do *not* have a "git-xyzzy" form!)

Anyway, while actually removing the "git-xyzzy" things is not practical right now, we can certainly start slowly to deprecate it internally inside git itself - in the shell scripts we use, and the test vectors.

This patch adds a "remove-dashes" makefile target, which does that. It isn't particularly efficient or smart, but it *does* successfully rewrite a lot of our shell scripts to use the "git xyzzy" form for all built-in commands.

(For non-builtins, the "git xyzzy" format implies an extra execve(), so this script leaves those alone).

So apply this patch, and then run
	make remove-dashes
	make test
	git commit -a
to generate a much larger patch that actually starts this transformation.

(The only half-way subtle thing about this is that it also fixes up git-filter-branch.sh for the new world order by adding quoting around the use of "git-commit-tree" as an argument. It doesn't need it in that format, but when changed into "git commit-tree" it is no longer a single word, and the quoting maintains the old behaviour).

NOTE! This does not yet mean that you can actually stop installing the "git-xyzzy" binaries for the builtins. There are some remaining places that want to use the old form, this just removes the most obvious ones that can easily be done automatically.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---

Comments? I think this is worth doing, but the patch that this scripting generates is actually fairly large, even if this patch itself is smallish.

Junio, up to you.
 Makefile             |    3 ++-
 fixup-builtins       |   16 ++++++++++++++++
 git-filter-branch.sh |    2 +-
 3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index a98e27a..1620ef8 100644
--- a/Makefile
+++ b/Makefile
@@ -987,7 +987,8 @@ check-sha1:: test-sha1$X
 check: common-cmds.h
 	for i in *.c; do sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; done
 
-
+remove-dashes:
+	./fixup-builtins $(BUILT_INS)
 
 ### Installation rules
 
diff --git a/fixup-builtins b/fixup-builtins
new file mode 100755
index 0000000..d7fae43
--- /dev/null
+++ b/fixup-builtins
@@ -0,0 +1,16 @@
+#!/bin/sh
+while [ "$1" ]
+do
+	old="$1"
+	new=$(echo "$1" | sed 's/git-/git /')
+	echo "Converting '$old' to '$new'"
+	git ls-files '*.sh' | while read file
+	do
+		sed "s/$old/$new/g" < $file > $file.new
+		chmod --reference=$file $file.new
+		mv $file.new $file
+	done
+	shift
+done
+git update-index --refresh >& /dev/null
+exit 0
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 8fa5ce6..0f54271 100644
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -383,7 +383,7 @@ while read commit parents; do
 
 	sed -e '1,/^$/d' <../commit | \
 		eval "$filter_msg" | \
-		sh -c "$filter_commit" git-commit-tree $(git-write-tree) $parentstr | \
+		sh -c "$filter_commit" "git-commit-tree" $(git-write-tree) $parentstr | \
 		tee ../map/$commit
 done <../revs
 
Next: Junio C Hamano
Message 1 of 20 in “Start deprecating "git-command" in favor of "git command"”
  1. Linus TorvaldsJun 30, 2007
  2. Junio C HamanoJun 30, 2007
  3. Yann DirsonJun 30, 2007
  4. Junio C HamanoJul 1, 2007
  5. Linus TorvaldsJul 1, 2007
  6. Junio C HamanoJul 1, 2007
  7. Johannes SchindelinJul 1, 2007
  8. Junio C HamanoJul 1, 2007
  9. Nicolas PitreJul 3, 2007
  10. Junio C HamanoJul 3, 2007
  11. Linus TorvaldsJun 30, 2007
  12. Junio C HamanoJun 30, 2007
  13. Junio C HamanoJun 30, 2007
  14. Jeff KingJul 1, 2007
  15. Johannes SchindelinJul 1, 2007
  16. Josh TriplettJul 1, 2007
  17. waltJun 30, 2007
  18. Johannes SchindelinJun 30, 2007
  19. waltJun 30, 2007
  20. Yann DirsonJul 1, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.