如何使用Git跟踪目录但不跟踪其中的文件?
如何使用Git跟踪目录但不跟踪其中的文件?
我最近开始使用Git,只有一个问题让我困扰。如何在不追踪其内容的情况下追踪目录?\n例如,我正在开发的网站允许上传文件。我想追踪上传目录,以便在分支等操作时创建该目录,但显然不追踪其中的文件(开发分支中的测试文件或主分支中的真实文件)。\n在我的.gitignore文件中,我有以下内容:\n
uploads/*.*
\n我还尝试过以下内容(忽略整个目录):\n
uploads/
\n这个目录可能还包含子目录(uploads/thumbs/ uploads/videos/),我希望能够追踪这些子目录,但不追踪它们的文件。\nGit是否支持这种操作?我已经到处搜索,但没有找到答案。
问题的出现的原因是,Git默认只会追踪并提交文件,而不会追踪和提交空目录。这对于希望保留目录结构的项目来说可能是一个问题。
解决方法是在目录中添加一个名为.gitignore的文件,并将其作为占位符文件。可以在.gitignore中添加一行代码来确保目录被追踪,而不是被忽略。常见的命名约定是使用.gitkeep作为占位符文件。
这个问题的解决方法在这里有一个很好的文章和评论,通过写一篇文章并获得评论,作者学到了一些东西。另外,某些情况下了使用.gitkeep作为占位符文件的命名约定,并表示对此感到非常满意。
总结一下,要在Git中追踪目录但不追踪文件,可以通过在目录中添加一个.gitignore文件,并使用.gitkeep作为占位符文件来实现。
如何使用Git跟踪目录而不是它们的文件?
问题的原因:
在Git中,默认情况下,无法直接将空目录添加到版本控制中。只有当目录中存在文件时,Git才会跟踪该目录。这可能会导致问题,因为有时我们希望跟踪一个目录的结构,而不仅仅是它的文件。
解决方法:
其中一种解决方法是在要跟踪的目录中包含一个名为`.gitignore`的文件,并在该文件中指定以下内容:
# 忽略此目录中的所有内容
*
# 除了这个文件
!.gitignore
这样,通过在目录中添加`.gitignore`文件,Git将跟踪该目录的结构,而不会跟踪其中的文件。
如果您希望了解如何将空目录添加到Git存储库中,可以参考以下链接:https://stackoverflow.com/questions/115983
在使用Git进行版本控制时,Git并不直接跟踪目录,而是跟踪文件。因此,要实现跟踪目录但不跟踪其文件,需要跟踪至少一个文件。假设你的.gitignore
文件类似于这样:
upload/*
你可以执行以下操作:
$ touch upload/.placeholder $ git add -f upload/.placeholder
如果忘记使用-f
选项,你会看到如下提示:
$ git add upload/.placeholder
The following paths are ignored by one of your .gitignore files:
upload
Use -f if you really want to add them.
fatal: no files added
然后,当你执行git status
命令时,你会看到如下输出:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: upload/.placeholder
#
显然,你可以继续执行以下操作:
$ touch upload/images/.placeholder $ git add -f upload/images/.placeholder
一个常见的惯例是使用.gitignore
文件作为占位符。因此,你可以将.gitignore
文件作为占位符文件。对于Abizern的评论,我确实没有考虑过使用.gitignore
文件作为占位符。抱歉,不知怎么错过了那些评论。
“Git doesn't track directories, it tracks files”这句话听起来很有趣,因为在UNIX中,一切都是文件,甚至目录也是文件。