2017-03-05 194 views
3

我在我的项目中有一个上传文件夹,我需要git来跟踪。
两个文件夹本身和所有子文件夹(我的意思是保持目录和所有子目录递归除了文件

上传,
上传/用户,
上传/用户/型材,
上传/用户/型材/图片

,并像其他路径)应该被跟踪。

我已经添加了一个名为.gitkeep到所有文件夹的空文件和我的.gitignore如下:

uploads/* 
!.gitkeep 

但Git是不跟踪的子文件夹。

============================================== =================

CodeWizard建议创建.gitkeep通过命令和文件没有解决强迫混帐忽略一个目录,除了具有那些所有文件后,孩子的.gitkeep文件。我用这个命令git-add -f在上传目录下创建的所有.gitkeep文件。

find . -name '.gitkeep' | xargs git add -f 
+0

你刚创建.gitkeep文件还是将它们添加到git? git status的输出是什么? – FuzzyAmi

+0

见http://stackoverflow.com/q/26189082/1256452和http://stackoverflow.com/q/5533050/1256452 – torek

回答

3

.gitkeep添加到所有需要的文件夹中。
Otherwize git会不会跟踪的文件夹


脚本来创建.gitkeep递归

# find all the directories (-type d) 
# filter the empty ones (-empty) 
# ignore the .git folder 
# add .gitkeep to all the matched folders 

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \; 

如果你愿意,你也可以把它添加到最内层夹和git会追踪所有的父文件夹以及当它的指数

最后一行(SUB1/SUB2 ...)是上述脚本的输出

enter image description here

+0

您的解决方案似乎并不与OP的'.gitignore'工作。它需要进行如下修改:'上传/ ** \ n上传/用户的\ n上传/用户/配置文件的\ n!!上传/用户/配置文件/图片# –

+0

我很抱歉,但我不明白你。脚本有什么问题?我已经测试过了,它的输出如截图 – CodeWizard

+0

所示。问题是,至少在我的系统中,它只跟踪最外面的'.gitkeep',即'uploads/.gitkeep',_if_OP的'.gitignore'是用过的。这就是为什么'.gitignore'也必须被修改的原因。 –

1

虽然CodeWizard的解决方案可以让你追踪的文件夹,它不能帮助你忽略他们的文件内容。

为此,您需要修改您的.gitignore以排除忽略每个子文件夹。例如:

uploads/** 
!uploads/users 
!uploads/users/profiles 
!uploads/users/profiles/pics 

你仍然需要.gitkeep文件每个子文件夹内,或者至少是最里面的文件夹内。由CodeWizard建议的命令做得非常出色:

find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \; 
+0

手动添加所有子文件夹不是我的类型,CodeWizard命令非常有用,但如果它添加了-f创建的.gitkeep,它将会很棒。 – Unique

相关问题