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

[RFC] Removing deleted files after checkout

From
CBCarl Baldwin <cnb@fc.hp.com>
Date
Aug 23, 2005, 16:21 UTC
Message-ID
<20050823162156.GA32240@hpsvcnb.fc.hp.com>
Hello,

I recently started using git to revision control the source for my web-page. I wrote a post-update hook to checkout the files when I push to the 'live' repository.

In this particular context I decided that it was important to me to remove deleted files after checking out the new HEAD. I accomplished this by running git-ls-files before and after the checkout.

Is there a better way? Could there be some way built into git to easily find out what files dissappear when replacing the current index with one from a new tree? Is there already? The behavior of git should NOT change to delete these files but I would argue that some way should exist to query what files disappeared if removing them is desired.

Here is some code that I wrote for this. It feels a bit hackish to me but I couldn't think of anything better. Comments and criticism are welcome.

#!/bin/sh

# HEAD changed so checkout the new HEAD deleted any files that should no longer # be around. oldlist=$(tempfile) newlist=$(tempfile) removedlist=$(tempfile)

git-ls-files | sort -r > $oldlist git-checkout-script -f git-ls-files | sort -r > $newlist

diff -u $oldlist $newlist |
  tail -n +4 |
  sed -n 's/^-//p' > $removedlist

# Remove each file cat $removedlist | xargs -rl rm -f # Remove the directories if empty cat $removedlist | xargs -rl dirname | xargs -rl rmdir -p --ignore-fail-on-non-empty

rm -f $oldlist $newlist $removedlist
# --- snip ---

If you are interested I attached the full post-update hook script that I actually use to do this. Again, comments are welcome.

Thanks, Carl

-- 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Carl Baldwin                        Systems VLSI Laboratory
 Hewlett Packard Company
 MS 88                               work: 970 898-1523
 3404 E. Harmony Rd.                 work: Carl.N.Baldwin@hp.com
 Fort Collins, CO 80525              home: Carl@ecBaldwin.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


#!/bin/sh

export PATH=/usr/local/bin:/usr/bin:/bin

# cd to the root of the project directory (assume one dir up from GIT_DIR)
cd $GIT_DIR/..
unset GIT_DIR

# Set up some temporary files and a trap to delete them
oldlist=$(tempfile)
newlist=$(tempfile)
removelist=$(tempfile)
trap "rm -f $oldlist $newlist $removelist" 0 1 2 3 15

# Get list of files from the current index
git-ls-files | sort -r > $oldlist

# Checkout the index to the working directory
git-checkout-script -f

# Get list of files from the current (new) index
git-ls-files | sort -r > $newlist

# Use diff to determine which files to remove from the working copy
diff -u $oldlist $newlist |
  tail -n +4 |
  sed -n 's/^-//p' > $removelist

cat $removelist | xargs -rl rm -f
cat $removelist | xargs -rl dirname | xargs -rl rmdir -p --ignore-fail-on-non-empty
Next: Daniel Barkalow
Message 1 of 10 in “[RFC] Removing deleted files after checkout”
  1. Carl BaldwinAug 23, 2005
  2. Daniel BarkalowAug 23, 2005
  3. Carl BaldwinAug 23, 2005
  4. Daniel BarkalowAug 23, 2005
  5. Carl BaldwinAug 23, 2005
  6. Daniel BarkalowAug 23, 2005
  7. Junio C HamanoAug 23, 2005
  8. Carl BaldwinAug 23, 2005
  9. Daniel BarkalowAug 23, 2005
  10. Junio C HamanoAug 24, 2005

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.