On 22 August 2011 10:15, Brandon Casey <brandon.casey.ctr@xxxxxxxxxxxxxxx> wrote: > On 08/22/2011 01:01 AM, Hilco Wijbenga wrote: >> Hi David, >> >> I noticed your very timely change to git stash in the current master >> branch. I tried it but it doesn't behave as I was expecting/hoping. > > It looks like it is actually creating the stash correctly, but it's > just not deleting the ignored directory. > > But, there is a small problem with your command sequence... > >> hilco@centaur ~/tmp/repo repo$ git --version >> git version 1.7.6.557.gcee4 >> hilco@centaur ~/tmp/repo repo$ git init >> Initialized empty Git repository in /home/hilco/tmp/repo/.git/ >> hilco@centaur ~/tmp/repo repo (master #)$ cat >>.gitignore <<- EOF >>> *.ignore >>> ignore-dir/ >>> EOF >> hilco@centaur ~/tmp/repo repo (master #%)$ mkdir src >> hilco@centaur ~/tmp/repo repo (master #%)$ touch file.txt src/code.txt >> hilco@centaur ~/tmp/repo repo (master #%)$ git add -A . >> hilco@centaur ~/tmp/repo repo (master #)$ git commit -m '1' >> [master (root-commit) 0fb4106] 1 >> 1 files changed, 2 insertions(+), 0 deletions(-) >> create mode 100644 .gitignore >> create mode 100644 file.txt >> create mode 100644 src/code.txt >> hilco@centaur ~/tmp/repo repo (master)$ touch file-a.ignore src/file-b.ignore >> hilco@centaur ~/tmp/repo repo (master %)$ echo "hello">src/code.txt >> hilco@centaur ~/tmp/repo repo (master *%)$ mkdir ignore-dir >> hilco@centaur ~/tmp/repo repo (master *%)$ touch >> ignore-dir/{file.ignore,file.txt} >> hilco@centaur ~/tmp/repo repo (master *%)$ git status >> # On branch master >> # Changes not staged for commit: >> # (use "git add <file>..." to update what will be committed) >> # (use "git checkout -- <file>..." to discard changes in working directory) >> # >> # modified: src/code.txt >> # >> # Untracked files: >> # (use "git add <file>..." to include in what will be committed) >> # >> # file-a.ignore >> # ignore-dir/ >> # src/file-b.ignore > ^^^^^^^^^^^^^^^^^ > Why are these entries here? My bad. I had a script that ran the commands but I decided to try run them on the CL so I copy-pasted them. That changed the tabs to spaces and ruined .gitignore. >> no changes added to commit (use "git add" and/or "git commit -a") > > if your .gitignore file looks like this: > > $ cat .gitignore > *.ignore > ignore-dir/ > > then why are those items showing up under "Untracked files:" in the call > to git status above? /methinks something is wrong with your .gitignore > file. It doesn't matter in this case, since --all will cause stash to > stash the untracked files regardless of whether they are ignored. > >> hilco@centaur ~/tmp/repo repo (master *%)$ git stash --no-keep-index --all >> Saved working directory and index state WIP on master: 0fb4106 1 >> HEAD is now at 0fb4106 1 >> Not removing ignore-dir/ >> hilco@centaur ~/tmp/repo repo (master $%)$ git status >> # On branch master >> # Untracked files: >> # (use "git add <file>..." to include in what will be committed) >> # >> # ignore-dir/ >> nothing added to commit but untracked files present (use "git add" to track) > > Also, in the future it would be nicer if you provided your list of > commands separately, at the beginning, linked together with &&. > This makes it easier to copy/paste into my terminal, rather than > having to extract the commands out from within the body. > Like this (slightly simplified): > > git --version && > git init && > cat <<-\EOF >.gitignore && > *.ignore > ignore-dir/ > EOF > mkdir src && > touch file.txt src/code.txt && > git add . && > git commit -m 'initial commit' && > touch file-a.ignore src/file-b.ignore && > echo "hello" >src/code.txt && > mkdir ignore-dir && > touch ignore-dir/{file.ignore,file.txt} && > git status && > git stash --all && > git status || echo 'FAILURE' Noted. Will do. >> So it quite explicitly states "Not removing ignore-dir/". > > That message is from git-clean, and it is the real problem. > >> How do I >> make sure it also stashes the ignore-dir directory? > > It actually did stash the ignore-dir, it just didn't remove it from > the working directory at the end. Try deleting the ignore-dir by > hand and then applying the stash, ignore-dir and its content should > be recreated. > > Something like this is probably the appropriate fix: > > diff --git a/git-stash.sh b/git-stash.sh > index f4e6f05..a2d4b4d 100755 > --- a/git-stash.sh > +++ b/git-stash.sh > @@ -240,7 +240,7 @@ save_stash () { > test "$untracked" = "all" && CLEAN_X_OPTION=-x || CLEAN_X_OPTION > if test -n "$untracked" > then > - git clean --force --quiet $CLEAN_X_OPTION > + git clean --force --quiet -d $CLEAN_X_OPTION > fi > > if test "$keep_index" = "t" && test -n $i_tree > > Needs tests. I just tried it with the extra -d and it all seems to work beautifully. Should your patch be sent anywhere? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html