如何停止跟踪git中目录的内容?

时间:2018-07-11 12:20:53

标签: git gitignore

我有一个名为img的目录。我希望该目录在存储库上退出,但始终应为空。我的意思是只应该跟踪该目录的内容。

这是我的项目的简化版本:

myproject/
    .git/
    application/
    public/
        img/
            img1.jpg
            img2.jpg
    vendor/
    composer.json
    composer.lock

我想在存储库中使它像这样:

myproject/
    .git/
    application/
    public/
        img/
    vendor/
    composer.json
    composer.lock

我该怎么做?


根据一些研究,我必须使用.gitignore文件。但是如何?我应该在项目的根目录上制作一个.gitignore文件并将其写入其中吗?

// .gitignore file
public/img/*

还是应该在.gitignore目录中创建一个img?如果可以,我应该在里面写些什么吗?


好,现在我遇到了一个新问题。让我们解释一下我想确切地做什么。 这是场景:

我在本地开发我的网站,并将其推送到github存储库中。然后,我进入服务器并执行git pull。还有一个img目录,其中包含所有用户的头像。我要做的就是将真实用户的头像保留在img目录中。如果我将整个img目录放在.gitignore内,则不会创建化身(因为缺少img目录)。如果我排除img目录的内容,那么当我执行新的git pull时,所有当前用户的头像都将消失。知道如何处理这种情况吗?

3 个答案:

答案 0 :(得分:3)

Git不会跟踪目录,只会跟踪文件。

为了在仓库中添加一个空目录,您必须在其中放置一个文件,并在项目的.gitignore中编写正确的规则。

但是,由于Git存储库允许在每个目录中放置一个.gitignore文件,因此您可以在要排除的目录中放置一个文件,并将以下行放入其中:

# Ignore everything in this directory
*
# ... but do not ignore this file
!.gitignore

将新文件添加到存储库并提交。

仅此而已。


如果要将所有忽略规则放在一个位置(在项目根目录的.gitignore文件中),则可以将一个空文件放在该目录中以忽略并放在上面前缀为.gitignore文件的路径。

通常,这样一个空文件名为.gitkeep(名称无关紧要,该文件用于表示其目的)。在这种情况下,请添加到项目的.gitignore文件中:

/public/img/*
!/public/img/.gitkeep

如果您已经将public/img中的文件添加到了存储库(并提交了文件),则必须先将其删除,以使其不再被跟踪。运行

git rm --cached public/img/*

,并将此更改与.gitignore中的更改一起提交。 --cached参数告诉git rm不要从工作树中删除文件,而只是停止跟踪它们。

答案 1 :(得分:2)

您应该通过发出.gitignore在工作目录中看到一个ls -la文件。如果未在其中创建.gitignore文件(与.git文件处于同一级别)。

在该文件中,您可以将路径添加到img文件夹中,如下所示:public/img/*

答案 2 :(得分:0)

Git不跟踪目录,仅跟踪文件。您可以执行的操作是跟踪该目录中的任何文件,例如.gitignore,甚至跟踪名为.placeholder的文件。您还需要取消版本化,但不删除实际文件,您可以使用git rm --cached file

# Untrack, but keep the existing files in img
git rm --cached myProject/public/img/*

# Create the placeholder file to keep the directory tracked
# You do not need this if any other versioned file exists
# in this directory or potentially any subfolders of this
# directory.
echo 'placeholder' > myProject/public/img/.placeholder

# Track the placeholder file in the img directory
git add myProject/public/img/.placeholder

# Commit your work
git commit -m 'YOUR COMMIT MESSAGE'