如何知道是否在git存储库中添加或删除了新目录

时间:2016-03-29 18:32:33

标签: git

我的团队要求在git中编写预提交钩子,这应该限制任何目录的添加或删除。

由于git总是认为文件创建一个新目录,用户可以简单地添加一个必需或虚拟文件并添加它,但是在提交之前我的预提交钩子应该比较远程中的已知目录结构并且如果违反则返回非零数字。

git log -n1 --pretty="format:" --name-only正在向我提供预提交中的更改列表,但需要一些想法,我可以单独比较目录结构。

2 个答案:

答案 0 :(得分:1)

如前所述,git并不是他们自己的方向。

原因是git tracks content ,目录中没有任何内容,只是元数据。

一旦我们解决了这个问题,问题仍然是

如何跟踪addition or deletion of directories

简单的答案是你不能因为git不跟踪目录 您可以做的是执行一个脚本(在您的钩子中),它将打印出当前目录,然后从所有提交的文件中删除该目录并验证该目录是否已存在。

# get a list of all the directories 
git ls-files | xargs -n 1 dirname | uniq

获得此列表后,请使用它来验证提交的文件是否全部仅添加到此列表中的文件夹中。

如您所见,此脚本仅打印目录。

enter image description here

答案 1 :(得分:0)

看起来很奇怪,目录不存储在git中。您将在<form class="form-inline"><input type='hidden' name='csrfmiddlewaretoken' value='****...' /> <div id="div_id_name" class="form-group"> <label for="id_name" class="control-label requiredField"> Name<span class="asteriskField">*</span> </label> <div class="controls "> <input class="form-control textinput textInput form-control" id="id_name" maxlength="100" name="name" type="text" /> </div> </div> </form> 上获得的唯一目录是存储存储库中存储的文件所需的目录,每个文件都以其路径存储。因此,您所能做的就是拒绝文件,其路径不在所需的目录结构之内。明智地使用您最喜欢的语言git clone或同等语言,并将其与您的模板进行匹配,将会很有帮助。