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

Re: A system administration use case for git

From
Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date
Apr 23, 2009, 09:55 UTC
Message-ID
<20090423095533.GE13989@pengutronix.de>
In-Reply-To
<2cfc40320904220133l5ab567f3q46608793b93f0e1f@mail.gmail.com>
Hello Jon,
On Wed, Apr 22, 2009 at 06:33:12PM +1000, Jon Seymour wrote:
> * calculate the git hashes of the tree (without making copies of the
> files in the tree)
You can hand-craft a tree object:
	for f in $filelist; do
		printf "100644 %s\x00" $f;
		git hash-object $f |
			perl -n -e 'chomp; for $c (split(/(.{2})/)) { printf("%c", hex($c)) if $c }';
	done |
		git hash-object -t tree --stdin
You get some extra points for directories that include subdirs :-)

There is a problem though, I think it has to do with the order of the files in the tree object. Here is a real-life example from the Linux kernel (I choosed the usr subdirectory, because it's small and doesn't contain subdirs):

	ukleinek@cepheus:~/gsrc/linux-2.6/usr$ for f in .gitignore Kconfig Makefile gen_init_cpio.c initramfs_data.S initramfs_data.bz2.S initramfs_data.gz.S initramfs_data.lzma.S; do printf "100644 %s\x00" $f; git hash-object $f | perl -n -e 'chomp; for $c (split(/(.{2})/)) { printf("%c", hex($c)) if $c }'; done | git hash-object -t tree --stdin
	64f2ca854bc19fd29479b198be11beba56a26b1e
	ukleinek@cepheus:~/gsrc/linux-2.6/usr$ git rev-parse HEAD:usr
	64f2ca854bc19fd29479b198be11beba56a26b1e

There is a practical problem though: The filelist has to be sorted in a way that is not provided by ls, so:

	ukleinek@cepheus:~/gsrc/linux-2.6/usr$ for f in $(ls -A); do printf "100644 %s\x00" $f; git hash-object $f | perl -n -e 'chomp; for $c (split(/(.{2})/)) { printf("%c", hex($c)) if $c }'; done | git hash-object -t tree -w --stdin
	a0a6efb3f1de956badc7607c7d372cc325a18846
	ukleinek@cepheus:~/gsrc/linux-2.6/usr$ git ls-tree a0a6efb3f1de956badc7607c7d372cc325a18846 | wc -l
	0
doesn't work :-/
This would make a nice plumbing:
	git hash-tree $directory

Best regards Uwe

-- 
Pengutronix e.K.                              | Uwe Kleine-König            |
Industrial Linux Solutions                    | http://www.pengutronix.de/  |
Previous: Martin LanghoffNext: Johannes Sixt
Message 3 of 8 in “A system administration use case for git”
  1. Jon SeymourApr 22, 2009
  2. Martin LanghoffApr 22, 2009
  3. Uwe Kleine-KönigApr 23, 2009
  4. Johannes SixtApr 23, 2009
  5. Uwe Kleine-KönigApr 23, 2009
  6. Jon SeymourApr 22, 2009
  7. Martin LanghoffApr 22, 2009
  8. Jon SeymourApr 22, 2009

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.