我有这个目录:
/thumbs
在这个目录中,我有一个.gitignore
文件,里面有这个:
#remove everything
*
#except this:
!.gitignore
如果我将图像文件添加到此目录中,我会这样做:
git status
图像文件列为未跟踪。
我该怎么办?
请注意以下事项:
在该目录中,我已经完成了:
git rm -r --cached .
git add .
git commit -m "gitignore SHOULD work"
我已经删除.gitignore文件中的任何额外的底部空格以确定。
但是,如果我添加该文件,它似乎未跟踪。
为什么?
我能做些什么来查看问题所在?
更新 在此文件夹中:
/user_uploaded_file
这是/thumbs
的PARENT文件夹我有以下gitignore:
#ignore everything
*
#except:
!.gitignore
!/thumbs
奇怪的事实:
如果我从父级内部的gitignore中删除了!/thumbs
指令,我们在git ls-files
内执行的!/thumbs
只会考虑.gitignore
。
我们可以自由添加,更改或删除git不关心的图像文件。
但是,如果我们将该行!/thumbs
放在父文件夹的gitignore中,它会将图像列为未跟踪的。
更新2
好奇的事实II:
如果在PARENT文件夹gitignore文件中我们这样做:
B)
*
!.gitignore
!/thumbs/.gitignore
而不是:
A)
*
!.gitignore
!/thumbs/
似乎有效。我的意思是,如果我们在/thumbs
内添加 更改或删除文件,git会正确忽略它们。
然而,虽然这适用于这个特定的本地回购,例如,我自己的回购,我不需要任何这些, A),有效。
:■
答案 0 :(得分:2)
首先,您必须添加并提交.gitignore文件,以便gitignore忽略该文件。
如果之前已提交相关文件,则需要git rm [filename]
将其删除。完成后,如果它被添加到您的gitignore(并且添加并提交了.gitignore),它将被忽略。
答案 1 :(得分:0)
请考虑以下行动:
$ mkdir -p /tmp/example
$ cd /tmp/example
$ git init .
$ mkdir -p user_uploaded_file/thumbs
$ echo "some noise" > user_uploaded_file/thumbs/somefile
$ git add user_uploaded_file/thumbs/somefile
$ git commit -m "simulate initial dirty state"
$ vim user_uploaded_file/.gitignore
$ vim user_uploaded_file/thumb/.gitignore
$ git add user_uploaded_file/.gitignore user_uploaded_file/thumbs/.gitignore
$ git commit -m "add ignore files from the question"
$ echo "some noise" > user_uploaded_file/thumbs/someotherfile
检查当前状态:
$ git status
# On branch master
nothing to commit (working directory clean)
$ git status --ignored
# On branch master
# Ignored files:
# (use "git add -f <file>..." to include in what will be committed)
#
# user_uploaded_file/thumbs/someotherfile
请注意,没有列出要提交的内容,并使用--ignored
标记显示哪些文件被忽略。
我做了:git rm -r --cached。
这并不是你想要的,尽管这不是问题的一个因素:
$ cd user_uploaded_file/thumbs
$ git rm -r --cached .
$ rm 'user_uploaded_file/thumbs/.gitignore'
$ rm 'user_uploaded_file/thumbs/somefile'
它 删除不需要的文件 - 但它也删除了git ignore文件,可以选择性地撤消:
$ git reset HEAD .gitignore
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: user_uploaded_file/thumbs/somefile
#
请注意,.gitignore文件现在不会显示为已删除。
让我们看看解决问题的方法,而不是专注于你所做的事情。据我所知,问题是您已将噪声提交到存储库,并且您想删除它。
要清理一个结账,所需的只是删除文件并提交:
$ git ls-files user_uploaded_file/thumbs/
user_uploaded_file/thumbs/.gitignore
user_uploaded_file/thumbs/somefile
$ git status --ignored
# On branch master
# Ignored files:
# (use "git add -f <file>..." to include in what will be committed)
#
# user_uploaded_file/thumbs/someotherfile
$ git rm -r --cached user_uploaded_file/thumbs/
rm 'user_uploaded_file/thumbs/.gitignore'
rm 'user_uploaded_file/thumbs/somefile'
$ git reset HEAD user_uploaded_file/thumbs/.gitignore
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: user_uploaded_file/thumbs/somefile
#
$ git status --ignored
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: user_uploaded_file/thumbs/somefile
#
# Ignored files:
# (use "git add -f <file>..." to include in what will be committed)
#
# user_uploaded_file/thumbs/somefile
# user_uploaded_file/thumbs/someotherfile
#
$ git commit -m "deleting thumb files"
这会删除文件(虽然它们仍然会存在于文件库中,然后推送到远程文件
$ git pull
$ git push
...
检查本地结帐的提交内容:
$ git branch -v
* master f216a83 deleting thumb files
在同一存储库的所有其他签出中,删除这些已经跟踪的缩略图文件所需的唯一步骤是:
$ git pull
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From /tmp/exmaple2/../example
41ec014..f216a83 master -> origin/master
First, rewinding head to replay your work on top of it...
Fast-forwarded master to f216a83940be0e60d560b27a882b9abca46ea383.
$ git branch -v
* master f216a83 deleting thumb files
$ git ls-files user_uploaded_file/thumbs
user_uploaded_file/thumbs/.gitignore
$ git status
# On branch master
nothing to commit (working directory clean)
$ ls -la user_uploaded_file/thumbs/
total 16
drwxrwxr-x 2 www-data www-data 4096 May 13 13:51 .
drwxrwxr-x 3 www-data www-data 4096 May 13 13:30 ..
-rw-rw-r-- 1 www-data www-data 48 May 13 13:30 .gitignore
-rw-rw-r-- 1 www-data www-data 4 May 13 13:49 morefiles
请注意,这将仅删除之前跟踪过的文件。
如果其他安装位于不同的分支上 - 所做的更改需要合并/挑选,因为它们不在分支历史记录中。
如果其他安装位于同一分支但不同的提交,则它具有本地提交 - 您需要检查原因/本地提交是否影响问题。< / p>
现有的git ignore文件的内容并不是必需的,它们可以很简单:
$ cd /tmp/example
$ echo "*" > user_uploaded_file/.gitignore
$ echo "*" > user_uploaded_file/thumbs/.gitignore
$ git commit -m "ignore everything in the user_uploaded_file folder"
文件user_uploaded_file/thumbs/.gitignore
实际上没有用于忽略目的,如果只是为了确保文件夹存在 - 实际上您可以使用空文件and name it anything。