如何将空目录(不包含任何文件)添加到Git存储库?
zazmityj1#
使目录(在存储库中)保持(几乎)为空的另一种方法是在包含以下四行的目录中创建一个.gitignore文件:
.gitignore
# Ignore everything in this directory * # Except this file !.gitignore
这样,您就不必像在M104的solution中那样获得正确的顺序。
这还提供了一个好处,即当您执行git状态时,该目录中的文件不会显示为“未跟踪”。
让@GreenAsJade的评论经久不衰:我认为值得注意的是,这个解决方案正是问题所要求的,但可能不是许多关注这个问题的人所寻找的。此解决方案可确保目录保持为空。上面写着“我真的永远不想让文件在这里签入”。与“我在这里没有任何文件要签入,但我需要这里的目录,文件可能稍后会来”不同。
rkttyhzu2#
你不能。请看Git常见问题解答。目前,git索引(临时区域)的设计只允许列出文件,没有人足够有能力进行更改以允许空目录,但没有人足够关心这种情况来补救它。
在目录中添加文件时,会自动添加目录。也就是说,目录永远不需要添加到存储库中,并且不会自行跟踪。
你可以说“git add <dir>”,它会在里面添加文件。
git add <dir>
如果您确实需要在 checkout 中存在一个目录,则应该在其中创建一个文件。.gitignore可以很好地用于此目的;您可以将其保留为空,或者填写您希望在目录中显示的文件的名称。
iszxjhcz3#
在目录中创建一个名为.keep的空文件,并添加该文件。
.keep
默认情况下,这将是大多数系统上的隐藏文件,但它会强制git承认该目录的存在,因为它现在有内容。
aamkag614#
您始终可以在目录中放置一个自述文件,并解释为什么要在存储库中放置该目录,否则为空目录。
huus2vyu5#
touch .placeholder
在Linux上,这将创建一个名为.placeholder的空文件。不管它有什么价值,这个名称对git是不可知的,这种方法在系统中的其他地方使用,例如/etc/cron.d/.placeholder。其次,正如另一位用户所指出的,.git前缀约定可以保留给Git本身用于配置目的的文件和目录。
.placeholder
/etc/cron.d/.placeholder
.git
或者,如另一个answer中所述,该目录可以包含描述性的README.md file。
README.md
无论采用哪种方式,这都要求文件的存在不会导致应用程序中断。
x8diyxa76#
首先要做的是:空目录不能是Git版本控制系统下的树的一部分。
它根本不会被追踪。但在某些情况下,“版本化”空目录可能是有意义的,例如:
cache/
logs/
很多用户建议:
1.放置README文件或其他包含某些内容的文件,以使目录非空,或1.创建一个.gitignore文件,采用某种“反向逻辑”(即包括所有文件),最终达到与方法1相同的目的。
README
虽然这两种解决方案肯定都有效但我发现它们与Git版本控制的有意义的方法不一致。
使用名为.gitkeep的空文件,以强制在版本控制系统中存在该文件夹。
.gitkeep
尽管这可能看起来没有那么大的区别:
例如,你应该使用自述信息系统,就像使用具有有用信息的自述系统一样,而不是作为保留文件夹的借口。
分离关注点总是一件好事,您仍然可以添加.gitignore来忽略不需要的文件。
将其命名为.gitkeep使文件名本身(以及对于其他开发人员,这对共享项目和Git存储库的核心目的之一很好)非常清楚和直接地表明该文件是
与代码无关的文件(因为前导圆点和名称)
一份明显与Git有关的文件
它的目的(保持)是清楚说明的,一致的,语义上相反的忽略
我看到Laravel、Angular-CLI等非常重要的框架采用了.gitkeep方法。
hwamh0ep7#
正如在其他答案中所描述的,Git无法表示其临时区域中的空目录。(请参阅Git常见问题解答。)但是,如果仅包含.gitignore文件的目录足够空,则您只能通过以下方式在空目录中创建.gitignore文件:
find . -type d -empty -exec touch {}/.gitignore ;
xpszyzbs8#
Andy Lester是对的,但如果您的目录只需要是空的,而不是空空的,您可以在其中放置一个空的.gitignore文件作为解决办法。
顺便说一句,这是一个实现问题,而不是基本的Git存储设计问题。正如在Git邮件列表中多次提到的那样,这一功能尚未实现的原因是没有人足够关心它的补丁,而不是它不能或不应该这样做。
rbpvctlc9#
Ruby on Rails日志文件夹创建方式:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
现在,日志目录将包含在树中。它在部署时非常有用,因此您不必编写例程来创建日志目录。
可以通过发出以下命令来阻止日志文件,
echo log/dev.log >> .gitignore
但你可能知道这一点。
9条答案
按热度按时间zazmityj1#
使目录(在存储库中)保持(几乎)为空的另一种方法是在包含以下四行的目录中创建一个
.gitignore
文件:这样,您就不必像在M104的solution中那样获得正确的顺序。
这还提供了一个好处,即当您执行git状态时,该目录中的文件不会显示为“未跟踪”。
让@GreenAsJade的评论经久不衰:
我认为值得注意的是,这个解决方案正是问题所要求的,但可能不是许多关注这个问题的人所寻找的。此解决方案可确保目录保持为空。上面写着“我真的永远不想让文件在这里签入”。与“我在这里没有任何文件要签入,但我需要这里的目录,文件可能稍后会来”不同。
rkttyhzu2#
你不能。请看Git常见问题解答。
目前,git索引(临时区域)的设计只允许列出文件,没有人足够有能力进行更改以允许空目录,但没有人足够关心这种情况来补救它。
在目录中添加文件时,会自动添加目录。也就是说,目录永远不需要添加到存储库中,并且不会自行跟踪。
你可以说“
git add <dir>
”,它会在里面添加文件。如果您确实需要在 checkout 中存在一个目录,则应该在其中创建一个文件。.gitignore可以很好地用于此目的;您可以将其保留为空,或者填写您希望在目录中显示的文件的名称。
iszxjhcz3#
在目录中创建一个名为
.keep
的空文件,并添加该文件。默认情况下,这将是大多数系统上的隐藏文件,但它会强制git承认该目录的存在,因为它现在有内容。
aamkag614#
您始终可以在目录中放置一个自述文件,并解释为什么要在存储库中放置该目录,否则为空目录。
huus2vyu5#
在Linux上,这将创建一个名为
.placeholder
的空文件。不管它有什么价值,这个名称对git是不可知的,这种方法在系统中的其他地方使用,例如/etc/cron.d/.placeholder
。其次,正如另一位用户所指出的,.git
前缀约定可以保留给Git本身用于配置目的的文件和目录。或者,如另一个answer中所述,该目录可以包含描述性的
README.md
file。无论采用哪种方式,这都要求文件的存在不会导致应用程序中断。
x8diyxa76#
为什么需要空的版本化文件夹
首先要做的是:
空目录不能是Git版本控制系统下的树的一部分。
它根本不会被追踪。但在某些情况下,“版本化”空目录可能是有意义的,例如:
cache/
或logs/
目录,我们希望在其中提供该文件夹,但.gitignore
提供其内容一些建议的解决方法
很多用户建议:
1.放置
README
文件或其他包含某些内容的文件,以使目录非空,或1.创建一个
.gitignore
文件,采用某种“反向逻辑”(即包括所有文件),最终达到与方法1相同的目的。虽然这两种解决方案肯定都有效但我发现它们与Git版本控制的有意义的方法不一致。
.gitignore
做一件与它的本意(排除文件)完全相反的事情(保留文件),即使它是可能的?.gitKeep方法
使用名为
.gitkeep
的空文件,以强制在版本控制系统中存在该文件夹。尽管这可能看起来没有那么大的区别:
例如,你应该使用自述信息系统,就像使用具有有用信息的自述系统一样,而不是作为保留文件夹的借口。
分离关注点总是一件好事,您仍然可以添加
.gitignore
来忽略不需要的文件。将其命名为
.gitkeep
使文件名本身(以及对于其他开发人员,这对共享项目和Git存储库的核心目的之一很好)非常清楚和直接地表明该文件是与代码无关的文件(因为前导圆点和名称)
一份明显与Git有关的文件
它的目的(保持)是清楚说明的,一致的,语义上相反的忽略
采用
我看到Laravel、Angular-CLI等非常重要的框架采用了
.gitkeep
方法。hwamh0ep7#
正如在其他答案中所描述的,Git无法表示其临时区域中的空目录。(请参阅Git常见问题解答。)但是,如果仅包含
.gitignore
文件的目录足够空,则您只能通过以下方式在空目录中创建.gitignore
文件:xpszyzbs8#
Andy Lester是对的,但如果您的目录只需要是空的,而不是空空的,您可以在其中放置一个空的
.gitignore
文件作为解决办法。顺便说一句,这是一个实现问题,而不是基本的Git存储设计问题。正如在Git邮件列表中多次提到的那样,这一功能尚未实现的原因是没有人足够关心它的补丁,而不是它不能或不应该这样做。
rbpvctlc9#
Ruby on Rails日志文件夹创建方式:
现在,日志目录将包含在树中。它在部署时非常有用,因此您不必编写例程来创建日志目录。
可以通过发出以下命令来阻止日志文件,
但你可能知道这一点。