Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次我尝试使用钩子时Git提交崩溃_Git_Bash - Fatal编程技术网

每次我尝试使用钩子时Git提交崩溃

每次我尝试使用钩子时Git提交崩溃,git,bash,Git,Bash,我有这样的目录结构:~/main/sub。在主文件夹中,我有一个git存储库。它忽略了子目录(主目录中有更多内容)。我需要这两个目录位于两个独立的源目录中,所以我在子目录中添加了一个新的git repo。但我需要同时承诺和推动这两个目标。因此,我在主目录repo中的commit msg钩子中添加了以下代码 echo "Commiting Content" now=$(date +"%c") cd sub git add --all . git commit -a -m "$now Update

我有这样的目录结构:~/main/sub。在主文件夹中,我有一个git存储库。它忽略了子目录(主目录中有更多内容)。我需要这两个目录位于两个独立的源目录中,所以我在子目录中添加了一个新的git repo。但我需要同时承诺和推动这两个目标。因此,我在主目录repo中的commit msg钩子中添加了以下代码

echo "Commiting Content"

now=$(date +"%c")
cd sub
git add --all .
git commit -a -m "$now Update"

echo "Commiting Content complete!"
但每次我运行提交时,这段代码都会执行,但会崩溃。index.lock文件将保留在子目录的.git文件夹中。它甚至不会将文件添加到提交中。当我转到子文件夹并使用git status时,它会告诉我仍然有未跟踪的文件


然后我将代码放在同一个hooks文件夹中的一个单独的bash脚本中。在终端上执行了它,它成功了!为什么这样做会导致钩子文件失败?

钩子运行在git存储库的根目录中。如果
main
是根目录,则只需执行
cdsub
而不是
cdmain/sub


你用什么?它可能适用于您的情况;它不会同时提交两个回购协议,但如果
sub
main
的子模块,您可以首先提交
sub
,然后将此提交作为更改添加到
main
并提交。这样,其他人可以使用您提交到main中的最新
sub
版本签出
main

对不起。。。我只做cd-sub。。。实际上,在main/dir/sub中,崩溃是否给出任何输出?否。当我提交到main时,它执行上述命令并显示sub也已提交。但事实并非如此。index.lock文件就在那里。就我个人而言,我认为在钩子中调用git不是一个好主意,但它应该可以工作。无论如何,您应该检查
git commit
的返回值,并在命令失败时中止提交(使用
set-e
或其他方法)。顺便问一下,为什么要提交msg而不是预提交?那么我认为最好使用bash脚本一次运行所有提交,对吗?