Reputation: 19143
I have a git repository that's used only to hold graphics and sound files used in several projects. They are all in one directory without sub-directories. Now I just created a script to copy these assets over from another, structured directory, with several levels of sub-directories.
Now I only want the (source) hierarchical file structure to be tracked by git, and the (target) flat directory (with all the files in one pile) should be ignored.
I've added the target directory to .gitignore, but git is still tracking changes in it. I thought if I commit the deletion of the old file in the target directory, git might stop tracking the new contents (copied in by the script), but it doesn't.
How do I make git forget about the target directory?
Upvotes: 251
Views: 85939
Reputation: 1914
If you need to have a tracked file (checked in) but do not want to track further changes of a file while keeping it in your local repository as well as in the remote repository, this can be done with:
git update-index --assume-unchanged path/to/file.txt
After that, any changes to this file will no longer show up in git status
.
To undo this, use the following command:
git update-index --no-assume-unchanged path/to/file.txt
Upvotes: 90
Reputation: 1539
TL;DR to clean up your git repository and make sure ALL your ignored items are indeed ignored:
git rm -r --cached .
git add .
git commit -m "Clean up ignored files"
Note: you don't need to specify a directory, this way your are cleaning the entire remote repo.
To go further read this
Upvotes: 5
Reputation: 1065
Not sure if this counts or makes me a bad person, but here it goes.
*Generated*
to the root .gitignore filedir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
I do feel a little bad about myself... but it does in fact work.
Upvotes: 0
Reputation: 26384
This command will cause git to untrack your directory and all files under it without actually deleting them:
git rm -r --cached <your directory>
The -r
option causes the removal of all files under your directory.
The --cached
option causes the files to only be removed from git's index, not your working copy. By default git rm <file>
would delete <file>
.
Upvotes: 556
Reputation: 19143
Ok, it seems that you must first do a check-in with the directory completely empty (neither old nor new files), and any files added thereafter will be ignored. If you remove the old files add and new ones before committing, the new ones are added to the repo although they should be ignored.
At least, this worked for me in this situation. Would still be great if anyone could provide more insight on what's going on.
Upvotes: -2
Reputation: 6981
For a subdirectory called blah/
added to git, both of the following seem to work to ignore new files in blah/
. Added to .gitignore:
blah
blah/*
Upvotes: 2