On Mon, 19 Aug 2013 10:04:33 -0700 (PDT) [email protected] wrote: > At some point I added a large file into a git repository. > It now exists on multiple branches, possibly with some > changes to it. I'd like to remove it from git, but leave its > current form (say the one on the master branch) on the > file system. > > I tried (on a dummy git archive) > > git filter-branch --index-filter 'git rm --cached --ignore-unmatch > bigfile' master branch1 branch2 > > That, however, does not leave a copy of bigfile on the file system. > It isn't clear to me why not, though the description of the > --tree-filter option to filter-branch (I'm using the --index-filter > option, but is is "similar") states: > " (new files are auto-added, disappeared files are > auto-removed ... )". > > Is there a direct way to do what I want, with git? I've found > similar requests; > none of the responses point out that the above command actually > deletes the file from the file system.
I'm with Dale on this issue, but why do you consistently mention "file system"? If you want `git filter-branch` to keep your file on your file system, just copy it yourself from the project's work tree somewhere else, and after filtering your branches, move it back to the work tree, then make it a part of a commit on the relevant branch. What's the problem? If you wonder why the file disappears from the work tree during the filtering process, my take on it is that 1) the work tree is used as a scratch space during the filtering, and 2) the work tree (normally) contains the same state HEAD does, so if filtering deleted the file from HEAD it's logical the work tree does not contain it as well. -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
