Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 - Fatal编程技术网

在提交之前为用户进行git探测

在提交之前为用户进行git探测,git,Git,我们是一个开发团队,需要在实验室的大型机器上工作。这些机器由PC机控制,开发也在这里进行。实验室PC总是在相同的用户id下运行。问题是我们希望git提交消息与开发人员用户id相关联。一种方法是请求机器上的每个用户手动运行一个脚本,该脚本执行以下操作: git config user.name Foo baz 但问题是这很容易被忘记 相反,我的想法是,也许我可以使用git-pre-commithook来探测用户的id,然后运行上面的命令。但不幸的是,它无法工作,因为在调用预提交挂钩之前,似乎已经

我们是一个开发团队,需要在实验室的大型机器上工作。这些机器由PC机控制,开发也在这里进行。实验室PC总是在相同的用户id下运行。问题是我们希望git提交消息与开发人员用户id相关联。一种方法是请求机器上的每个用户手动运行一个脚本,该脚本执行以下操作:

git config user.name Foo baz
但问题是这很容易被忘记

相反,我的想法是,也许我可以使用
git-pre-commit
hook来探测用户的id,然后运行上面的命令。但不幸的是,它无法工作,因为在调用预提交挂钩之前,似乎已经查询了user.name字段

另一个丑陋的想法是使用post-commit钩子获取用户id,然后根据用户输入的名称重写最后一条提交消息。这样行吗


有人能解决这个问题吗?

您可以在不同的位置存储不同用户的配置文件,然后编写一个脚本在登录时运行,将
$GIT\u config
设置为指向用户的配置文件。查看
git help config
ENVIRONMENT
部分


编辑:如果用户使用与其他人相同的shell,您可以在
git
周围编写一个包装器,提示用户,设置环境变量,然后运行real
git

我所做的是创建全局配置user.name:

git config user.name CONFIGUREMEINTHELOCALREPOxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
至少对于我的git版本(1.7.5.3),它是一个968字节长的值,可以设置,但永远不允许提交<代码>致命:个人识别码过长

然后,您可以要求用户将环境变量(1)和/或本地git配置变量设置为允许提交的sane值

是的,这也假设用户将创建一个新会话(环境变量)或拥有一个私有repo(本地配置)。如果人们共享同一个会话(走到一个不安全的预登录控制台),我想你可能大部分都是运气不佳,不过你可以尝试让$PROMPT_命令检查空闲时间,取消设置变量或类似的东西,或者使用$TMOUT自动登录

(1) 有关环境变量:

       $GIT_AUTHOR_NAME
       $GIT_AUTHOR_EMAIL
       $GIT_COMMITTER_NAME
       $GIT_COMMITTER_EMAIL

不幸的是,这忽略了一点,即系统总是使用相同的用户id登录,因此没有可挂接的登录。我假设用户会通过SSH登录,或者以某种方式为自己启动一个新会话,而不仅仅是走向一个不安全的终端。关于包装器的想法,这并不是那么简单,因为我必须假设用户不会直接在命令行上访问git,而是通过诸如GitExtensions或Windows上的TortoiseGit之类的工具。但是如果这些也调用命令行git,那么它可能是可行的。我们可以假设会话(登录)绑定到特定的用户吗?还是机器只是开着/开着?我想这里更大的问题是为什么用户不能只登录帐户。此工作流非常不正常。。。在Git的末端的任何解决方案都只是猪唇膏。PC在Windows下的一个不安全的环境中确实是开放的,并且总是在同一个用户ID下运行。问题是,机器必须在没有PC控制的情况下离开一段短的时间,因为这将是破坏性的。要求每个开发人员注销和登录将是我希望避免的额外步骤。目前使用的是subversion,其优点是用户在进行提交时必须进行身份验证。这就是我试图复制的内容。谢谢,但由于这项工作是在Windows下完成的,因此无法使用$PROMPT\u命令或$TMOUT方法。但是仔细想想,同样的效果也可以通过让post-commit钩子擦除本地GIT变量,从而在下次提交之前通过脚本强制重新安装这些变量来实现。@dov:这取决于您使用的shell。如果您使用的是git shell中的msysgit,那么仍然有提示符_命令/TMOUT。顺便说一句,post-commit不能影响shell环境变量,但它当然可以删除git-config变量。