git commit -am“提交消息”不适用于无业游民的机器

时间:2018-10-18 09:00:50

标签: windows git vagrant hook nfs

我在Windows 7中使用Git Bash。对于我的项目,我在Windows上安装了VirtualBox和Vagrant。在我的主目录中,有一些项目文件夹已基于nfs同步到无业游民的机器中。因此,Vagrant将使文件保持同步。

此框是一个基于debian / contrib-jessie64的Web服务器,具有一些配置(如Git),用于通过Composer安装多个软件包。 Git仅用于BitBucket,因为某些软件包需要ssh权限。但是我从来没有在盒子里使用过Git本身,因为它非常慢。此外,需要Git侦听多个钩子。网络服务器确实安装了PHP和Composer,但我的主机(Windows)没有安装。我之所以没有在Windows上安装所有组件的原因是,在主机和客户机上都应保持所有版本相同。我确实希望服务器为我完成所有php任务,这很好。

因此,要在Windows上使用Git,需要在Windows以及该盒子上配置git钩子。正在Windows上监听更改的所有挂钩都在无用信息框中执行相应的挂钩。当然,所有参数都通过管道传递。

这是我在Windows上的预提交文件

#!/usr/bin/env bash
coreDirectory="$HOME/projects/foo"

arguments=""

for arg in "$@"
do
    arguments="$arguments $arg"
done

cd $coreDirectory && vagrant ssh -c "cd /home/projects/foo && 
./.git/hooks/pre-commit $arguments"

这很好。框中的pre-commit文件正在执行,并触发一个特殊的Executor,该Executor调用./vendor/bin/phpcs文件进行代码嗅探。

我只想触发暂存文件上的代码嗅探规则,因此应侦听已添加到暂存区的所有已修改或未跟踪的文件。这也很好。执行器使用以下命令准备所有文件:

git -C /home/projects/foo diff --name-only --diff-filter=AM --cached

在Windows中,使用 git add --all 将所需文件添加到暂存区域中并提交它们可以正常工作,并且pre-commit钩会触发框中的pre-commit钩,从而触发CodeSniffer。< / p>

但是使用 git commit -am“ Foo bar” 不能与上面的命令一起正常工作。钩子会做出反应,但是试图获取--cached文件的计算机中的Executor命令将返回一个空集。

我认为在我在Windows上使用 git commit -am 命令或命令 git后,无业游民的盒子不够快,无法将更改的文件移动到暂存区commit -am 甚至不会将文件移到暂存区域。

您有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您使用1时,Git会构建一个新的和临时的索引来保存要提交的文件。通过环境变量git commit -a传达此新临时索引的存在。

当您使用GIT_INDEX_FILE在另一台机器上运行命令时(即使它是VM,也为此目的是另一台机器),该另一台机器没有收到ssh设置,因此它使用正常的日常指标。 索引没有任何变化,因此您看到的行为是正确的:实际上,没有上演任何

请注意,索引文件的内容在Windows和Linux上有所不同(Git存储几乎原始的GIT_INDEX_FILE系统调用数据),因此尝试以这种方式在主机之间共享索引文件通常是不明智的。实际上,Virtualbox共享文件夹具有许多...功能吗?虫子?功能不对?无论您要如何称呼它们,事物在Git环境中的表现都不理想。我发现将每个VM视为真正独立的机器更加可靠,尽可能少地使用共享文件夹功能,尤其是永远不要使用它来存储Git正在进行的工作。