Ignoring directories in Git repositories on Windows
Asked Answered
P

21

1536

How can I ignore directories or folders in Git using msysgit on Windows?

Petaliferous answered 5/12, 2008 at 12:17 Comment(6)
Do you want the cache folder to be excluded from the repository completely, or just its contents?Borak
I'm guessing that the OP has multiple cache directories, whose contents should be ignored, but wants to make sure that those directories are created for anyone who clones the repository.Mandell
@Gareth: since empty folders aren't tracked with git, if the content is ignored, the folder also will be, won't it?Weisburgh
Exactly, hence the index.html files. that way the folders are not empty.Estrange
I only mentioned that because some people use hidden files (commonly .gitkeep) to indicate a directory that should be keptBorak
is the / at the end what makes it know its a directory it should ignore?Perineuritis
T
2165

Create a file named .gitignore in your project's directory. Ignore directories by entering the directory name into the file (with a slash appended):

dir_to_ignore/

More information is here.

Thumbtack answered 5/12, 2008 at 12:54 Comment(12)
In a windows cmd prompt you can either use 'edit .gitignore' or 'notepad .gitignore' to create the correct file.Brainless
Or you can also use 'touch .gitignore' from within the windows git bash command prompt and that will create the correctly named file which can then in turn be edited by notepad or the like...Alo
Or just create a file named .gitignore. with explorer and edit it with notepad (the trailing dot will be removed). That way you don't have to use command prompt.Kropp
Or you could vim .gitignore from the terminal. :)Shown
Or, which surprisingly has not been mentioned even though it is the fastest way, just type "echo folder_to_ignore>> .gitignore" in the console.Vaginismus
This will recursively ignore all subfolders named dir_to_ignore, for example both root_dir/dir_to_ignore and root_dir/some_dir/dir_to_ignore would be ignoredEarpiece
Double check the file encoding that results from "echo folder_to_ignore >> .gitignore" on a Windows machine. Make sure git doesn't treat it as a binary file.Centurial
Remember to run git reset folder/Subscribe
you can also use this command in cmd: copy con .gitignore then type your dir_to_ignore then press ctrl+z followed by Enter! (learned it when I was a child and my dad was learning DOS)Kick
Sometimes I have to run git rm --cached -r . to make the gitignore work properly....Thornie
Or you could create/find a good .gitignore file and copy and paste it every time you need it. That's why I'm here... mine is not working :)Tabulator
In windows , I used Notepad++ to save a new .gitignore, by unchecking the "Append extension" checkboxMillisecond
R
238

By default, Windows Explorer will display .gitignore when in fact the file name is .gitignore.txt.

Git will not use .gitignore.txt

And you can't rename the file to .gitignore, because Windows Explorer thinks it's a file of type gitignore without a name.

Non command line solution:

You can rename a file to ".gitignore.", and it will create ".gitignore"
Ruysdael answered 22/7, 2010 at 11:23 Comment(6)
That works? I've always just told people to open notepad and in the Save As dialog type the filename surrounded by doublequotes, so for example ".gitignore" and it saves it without automatically adding an extension.Hutner
Neat. Including a trailing period does work. Explorer strips off the last period, resulting in a file named ".gitignore". I think the quotes method is cleaner though and less likely to create surprises.Pravit
Or, in the Save As dialog, change the file type to "All Files (.)" - then Windows will not append any extension.Chamois
or in git bash just type "touch .gitignore" in your folderLifegiving
".gitignore." - This is great trick ! I always had trouble with .htaccess as well...Hurling
fyi this no longer applies to latest windows versions - you can now create files with a leading periodSometimes
P
145

It seems that for ignoring files and directories there are two main ways:

  1. .gitignore

    • Placing .gitignore file into the root of your repository besides the .git folder (in Windows, make sure you see the true file extension and then make .gitignore. (with the point at the end to make an empty file extension))
    • Making the global configuration ~/.gitignore_global and running git config --global core.excludesfile ~/.gitignore_global to add this to your Git configuration

    Note: files tracked before can be untracked by running git rm --cached filename

  2. Repository exclude - For local files that do not need to be shared, you just add the file pattern or directory to the file .git/info/exclude. Theses rules are not committed, so they are not seen by other users. More information is here.

To make exceptions in the list of ignored files, see this question.

Preacher answered 1/5, 2012 at 10:30 Comment(6)
good job pointing out the git rm --cached <filename>. Absolutely critical for repos that existed BEFORE you created the .gitignoreDimetric
git rm --cached <filename> fixed the problem I was having with .gitignore :)Shouse
Yeah git rm --cached filename is absolutely crucial. It was driving me crazy as git was still staging files I clearly stated to be ignored (created gitignore after initial commit). Thank you very much!Coonskin
Solved my problem. Git was tracking vendor folder in my laravel repo even though I had added vendor folder in gitignore. Thanks alot.Sorcerer
my builds folder was being tracked. It must have been added to .gitignore after a build. Anyway, the command to untrack the folder is this: git rm --cached builds -r (where builds is the folder you want to untrack and -r is recursive meaning all files and sub-folders will be untracked)Vamoose
For me it was node_modules so had to run git rm --cached node_modules -rHaymaker
S
70

To ignore an entire directory place a .gitignore of “*” there.

For example,

Example System

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Goal

  • ignore the contents of dirB/

Top Level (/root/.gitignore)

  • You could just “dirB/“ here

Ignored Directory (/root/dirB/.gitignore)

  • Or you could “*” here

Git watches for gitignore at every step of the file system. So here I choose dirB/.gitignore as “*” to ignore dirB/, including all files and subdirs within.

Done ☺️

Spend answered 15/6, 2016 at 21:51 Comment(8)
What is the standard gitignore info? Can you give an example? What do you mean when you say "the file just reads as * ", this doesn't make any sense? I don't think I understood anything from this answer and couldn't find it at all simple.Caesaria
The file is one character, a single ‘*’. I will review and share further detail in a bitSpend
I feel this is cleaner because it doesn't clutter your main .gitignore fileTanker
@Caesaria in English, when you say "X reads as Y" it means "Y is written on/in X"Sciomancy
Elaborate please - I am not sure what you are saying! Share more detail and I will updateSpend
@skdhfgeq2134: In programming, the asterisk * is short for "all" or "everything." So in this case "*" means everything in the directory.Susurration
You could just say Put only "*" in the file.Bondstone
@Bondstone if that’s what you read - success! You understand my content. I used complete description to cover a wider audienceSpend
T
47

To instruct Git to ignore certain files or folders, you have to create .gitignore file.

But in Windows Explorer you have to provide a name for the file. You just cannot create file with just an extension. The trick is that create a empty text file and go to command prompt and change the name of the file to .gitignore:

ren "New Text Document.txt" .gitignore

Now open the file with your favorite text editor and add the file/folder names you wish you ignore. You can also use wildcards like this: *.txt.

Totalitarianism answered 25/3, 2010 at 18:14 Comment(3)
Or just: echo dir_to_ignore/ > .gitignorePanarabism
Or type nul > .gitignore to create an empty fileDoily
Or just call the file .gitignore. when the file extensions are not hidden in your Windows explorerPreacher
P
45

I had some issues creating a file in Windows Explorer with a . at the beginning.

A workaround was to go into the commandshell and create a new file using "edit".

Petaliferous answered 5/12, 2008 at 13:50 Comment(1)
or just add an extra . at the end so explorer stops thinking .gitignore is the extension. Then on entry that trailing dot with no extension just gets eaten and you are left with .gitignore TL;DR: try to name it .gitignore. => you end up with .gitignoreAntigen
R
32

If you want to maintain a folder and not the files inside it, just put a ".gitignore" file in the folder with "*" as the content. This file will make Git ignore all content from the repository. But .gitignore will be included in your repository.

$ git add path/to/folder/.gitignore

If you add an empty folder, you receive this message (.gitignore is a hidden file)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

So, use "-f" to force add:

$ git add path/to/folder/.gitignore -f
Rivkarivkah answered 29/6, 2012 at 10:29 Comment(0)
E
27

In Windows there's an extra catch with slashes. Excluding a single directory in .gitignore with

dir_to_exclude/

will possibly work, but excluding all directories with

/

causes problems when you have file names with spaces (like my file.txt) in your directory: Git Bash escapes these spaces with a backslash (like my\ file.txt) and Git for Windows doesn't distinguish between / and \.

To exclude all directories, better use:

**/

Two consecutive asterisks signify directory contents.

Equipollent answered 13/1, 2014 at 13:49 Comment(0)
A
27

You can create the ".gitignore" file with the contents:

*
!.gitignore

It works for me.

Altagraciaaltaic answered 5/2, 2015 at 14:27 Comment(3)
This is the best answer, it also brings added benefits in project deployment and maintenance.Raynard
I needed to also add /.gitgnore to also ignore the file .gitignore itselfLangbehn
Why !.gitignore with an exclamation point? The docs say the ! symbol negates instructions. Simply including * and .gitignore should work. More related details: https://mcmap.net/q/12406/-add-gitignore-to-gitignore/10177000Susurration
L
24

Just in case you need to exclude sub folders you can use the ** wildcard to exclude any level of sub directory.

**/build/output/Debug/
Loaf answered 17/2, 2018 at 0:40 Comment(2)
Where should I add this expression?Caesaria
@Caesaria Please, add in ".gitignore" file.Grudging
H
17

Also in your \.git\info projects directory there is an exclude file that is effectively the same thing as .gitignore (I think). You can add files and directories to ignore in that.

Heterograft answered 10/2, 2011 at 10:12 Comment(2)
I like this approach, I just can't get along with the path in there, I want to ignore a folder in the main repo, how to?Icsh
But aren't you supposed to leave files in .git alone (manipulate the content through official means)?Outrun
T
12

When everything else fails try editing the file

/.git/info/exclude

and adding the directories you want to the end of the file, like this:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

I added the folders "assets" and "compiled" to the list of files and directories to ignore.

Ternion answered 4/4, 2018 at 21:38 Comment(2)
I am using Atom on Windows 10. It's working! Thanks dude!Sailplane
I tried all the others with my current configuration and this was my ultimate definitive answer.Ternion
G
8

I've had some problems getting Git to pick up the .gitignore file on Windows. The $GIT_DIR/info/exclude file always seems to work though.

The downside of this approach, however, is that the files in the $GIT_DIR directory are not included in the check-in, and therefore not shared.

p.s. $GIT_DIR is usually the hidden folder named .git

Gunsel answered 15/2, 2012 at 19:43 Comment(1)
Yes, git on windows is really finicky about .gitignore - the local exclude file does what I need though. Thanks!Countrybred
C
8

On Unix:

touch .gitignore

On Windows:

echo > .gitignore

These commands executed in a terminal will create a .gitignore file in the current location.

Then just add information to this .gitignore file (using Notepad++ for example) which files or folders should be ignored. Save your changes. That's it :)

More information: .gitignore

Cowles answered 27/6, 2018 at 11:22 Comment(1)
"Then just add information.." You brushed over a relatively important step there.Dellora
M
7

I assume the problem is that your working tree is like:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... with the .gitignore you describe. This will give you git status output like:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... if the index.html files have not yet been added to the repository. (Git sees that there are unignored files in the cache directories, but it only reports the directories.) To fix this, make sure that you have added and committed the index.html files:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... and your git status will then look like:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Obviously you do want to commit .gitignore as well. I was just being lazy with this test case.)

Mandell answered 29/6, 2012 at 10:11 Comment(2)
You probably do want to commit .gitignore especially as you're likely to want to track changes to it, and so is your team (if you're working with one). See https://mcmap.net/q/12437/-how-can-i-stop-gitignore-from-appearing-in-the-list-of-untracked-filesEstriol
@Dave Everitt: That's exactly why i said "Obviously you do want to commit .gitignore as well".Mandell
K
6

On Windows and Mac, if you want to ignore a folder named Flower_Data_Folder in the current directory, you can do:

echo Flower_Data_Folder >> .gitignore

If it's a file named data.txt:

echo data.txt >> .gitignore

If it's a path like "Data/passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 
Kimberly answered 14/8, 2018 at 11:17 Comment(0)
O
2

I had similar issues. I work on a Windows tool chain with a shared repository with Linux guys, and they happily create files with the same (except for case) names in a given folder.

The effect is that I can clone the repository and immediately have dozens of 'modified' files that, if I checked in, would create havoc.

I have Windows set to case sensitive and Git to not ignore case, but it still fails (in the Win32 API calls apparently).

If I gitignore the files then I have to remember to not track the .gitignore file.

But I found a good answer here:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html

Ofris answered 6/8, 2012 at 15:1 Comment(1)
The link appears to be broken (it first redirects to the 'https' version): "Secure Connection Failed. An error occurred during a connection to archive.robwilkerson.org. PR_END_OF_FILE_ERROR"Outrun
I
1

Just create .gitignore file in your project folder Then add the name of the folder in it for ex:

frontend/node_modules
Ink answered 11/2, 2020 at 23:58 Comment(2)
What would that line actually ignore?Dellora
frontend/node_modules folder; if u have backend and frontend for your app you can specify the ignore of node modules by typing the name of the front end folder /node_modules :)Ink
H
1

This might be extremely obvious for some, but I did understand this from the other answers.

Making a .gitignore file in a directory does nothing by itself. You have to open the .gitignore as a text file and write the files/directories you want it to ignore, each on its own line.

so cd to the Git repository directory

touch .gitignore
nano .gitignore

and then write the names of the files and or directories that you want to be ignored and their extensions if relevant.

Also, .gitignore is a hidden file on some OS (Macs for example) so you need ls -a to see it, not just ls.

Hydrogenolysis answered 19/12, 2020 at 17:57 Comment(0)
B
1

Temporarily ignore a directory/file that was already in git:

I have a lot of projects in a multi-project gradle project and they can take a long time to delete them, and they're all pretty much the same but different. From time to time I want to remove those from the gradle build by deleting them altogether. git can get them back after all. However I don't want them showing up in git status either. So I use the following simple procedure;

  1. delete files and folders I don't want.
  2. verify build still works
  3. tell git to ignore the deleted files for a bit (we can get them back)


git ls-files --deleted -z | git update-index --assume-unchanged -z --stdin

  1. go about life without the dirs until you want them back. Then run the same command as before but switch out assume-unchanged for no-assume-unchanged


git ls-files --deleted -z | git update-index --no-assume-unchanged -z --stdin

Bodywork answered 8/4, 2022 at 13:15 Comment(0)
K
1

For those for whom the above answers didn't work. The process is pretty simple.

  1. Go into plastic scm app and select your Workspace Explorer window
  2. Notice that the folder you want to ignore has a green tick on it
  3. Right click on it and select "Delete"
  4. In the pop-up window, select "Dont delete from disk"
  5. Now simply add the folder name to ignore.conf file in root of project
K answered 4/11, 2023 at 9:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.