首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止NUL字节出现在我的GIT存储库和提交消息中?

如何防止NUL字节出现在我的GIT存储库和提交消息中?
EN

Stack Overflow用户
提问于 2013-12-20 05:02:34
回答 6查看 3K关注 0票数 8

我有一个相对干净的Mavericks 10.9安装,运行的是git版本1.8.5.1;我的文件位于一个挂载的SMB共享上,而且我不能再正确地使用我的GIT存储库,因为空字节(\0's)一直出现在我所有的版本控制文件中.甚至是在GIT动态生成的文件中。

用手输入git commit -m "Test message",给我:

代码语言:javascript
运行
复制
error: a NULL byte in commit log message not allowed.
fatal: failed to write commit object

如果我尝试使用git commitpico视图中出现的默认提交消息如下所示:

代码语言:javascript
运行
复制
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch feature/centos_support
# Your branch is up-to-date with 'origin/feature/centos_support'.
#
# Changes to be committed:
#       modified:   README.md
#
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

有一段时间,在结束时手动删除那些空字节是有效的,而且我能够提交,但是即使是这样的时间间隔也不再起作用(错误与上面相同),我被迫丢弃我的整个repo,重新克隆它,并重做我想要提交的任何东西。

新的存储库正常工作了一段时间,但是最终空字符又重新出现了,我也遇到了同样的问题。

相同的空字节(如上面所示)出现在我修改的文件的开头和结尾,导致GIT将它们视为二进制文件,直到我手动使用vi删除空行为止。

  • 有没有其他人经历过这种情况,并/或找到了解决办法?
  • 是什么引起的?

我很感谢你能提供的任何帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-02 00:12:01

看起来这是OSX10.9小牛和(一些?)的问题。SMB股票。目前还没有修复或解决方法。

有些人建议用cifs://来连接共享,而不是smb://,但是这似乎不能解决这个问题。

这一问题可转载如下:

代码语言:javascript
运行
复制
<on an SMB share>

$ echo "blah blah blah blah" > test.txt
$ more test.txt

<file is fine>

$ echo "blah" > test.txt
$ more test.txt

<file has ^@ characters at the end>

因此,使用终端,如果用较小的文件覆盖文件,则在结尾处得到这些NUL字符。还可能有其他方法使文件被附加或加上这些NUL字符。

很多人都在抱怨这一点,例如:bug.cgi?id=237766

以下是该页的结论:

我可以在Komodo Edit和Aptana Studio中复制空字符,因此这似乎不是Netbeans特有的问题,而且可能与NAS/SMB问题有关。 我强制使用了smb1连接,但这并没有什么区别。即使我弹出共享,并重新连接cifs://并创建、修改和保存一个文件,它仍然被破坏。 看来苹果将不得不解决这个问题,除非有人能想出可行的解决办法。

希望苹果很快就能解决这个问题。在此之前,您可以使用Double指挥官或其他实现自己的SMB堆栈的程序。

票数 11
EN

Stack Overflow用户

发布于 2014-03-23 23:33:58

自从升级到小牛队之后,我也遇到了同样的问题。这种情况发生在存储在SMB驱动器上的git存储库中,每次提交的消息都比以前的提交短:

代码语言:javascript
运行
复制
$ git commit -a -m "long comment"

[master 2516835] long comment
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git commit -a -m "short"

error: a NUL byte in commit log message not allowed.
fatal: failed to write commit object

我注意到提交消息存储在文件COMMIT_EDITMSG中,即空字节(正如其他海报所描述的)。只需在提交之前删除文件就可以了:

代码语言:javascript
运行
复制
$ rm .git/COMMIT_EDITMSG 
$ git commit -a -m "short"

[master e8bd92e] short
 1 file changed, 1 insertion(+), 1 deletion(-)

希望这个解决方案也对你们有用。快把我逼疯了。

票数 2
EN

Stack Overflow用户

发布于 2013-12-20 10:04:52

Git假设提交消息采用UTF-8编码,我想这在您的系统中是不一样的,这就是为什么它看到\0字节的原因。尝试以下几点:

代码语言:javascript
运行
复制
git config --add i18n.commitencoding ISO-8859-1
git commit -m "Test message"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20696643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档