我有一个相对干净的安装Mac OS X Mavericks 10.9运行git版本1.8.5.1;我的文件在已安装的SMB共享上,我无法再使用我的GIT存储库,因为NULL字节(\ 0)不断出现在我的所有版本控制文件中......甚至在动态生成的文件中也是如此通过GIT。
手工打字git commit -m "Test message"
,给我:
error: a NULL byte in commit log message not allowed.
fatal: failed to write commit object
如果我尝试使用git commit
,pico
视图中显示的默认提交消息如下所示:
# 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,重新克隆它,并重做我想要提交的任何东西。
新鲜的存储库暂时正常工作,但最终NULL字符又回来了,我又遇到了同样的问题。
相同的NULL字节(如上所示)出现在我修改的文件的开头和结尾,导致GIT将它们视为二进制文件,直到我手动使用vi
删除NULL行。
感谢您提供的任何帮助。
答案 0 :(得分:11)
看起来这是OS X 10.9 Mavericks和(部分?)SMB共享的问题。目前没有修复或解决方法。
有些人建议使用cifs://而不是smb://连接到共享,但这似乎无法解决问题。
该问题可以转载如下:
<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字符。
有很多人抱怨这个,例如: https://netbeans.org/bugzilla/show_bug.cgi?id=237766
以下是该页面的结论:
我可以在Komodo Edit和Aptana Studio中复制空字符,因此这似乎不是Netbeans特定的问题,可能与NAS / SMB问题有关。
我强制使用smb1连接,但没有任何区别。即使我弹出共享,并重新连接cifs://并创建,修改和保存文件,它仍然已损坏。
看起来苹果必须解决这个问题,除非有人能提出可行的解决方法。
希望Apple能尽快解决这个问题。在此之前,您可能会使用Double Commander或其他一些实现自己的SMB堆栈的程序。
答案 1 :(得分:2)
自从更新到Mavericks后我遇到了同样的问题。它发生在每次提交时存储在SMB驱动器上的git存储库中,这些提交的消息比前一次提交的更短:
$ 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中,即空字节(如其他海报所述)结束。只是在提交之前删除文件就可以了:
$ rm .git/COMMIT_EDITMSG
$ git commit -a -m "short"
[master e8bd92e] short
1 file changed, 1 insertion(+), 1 deletion(-)
希望解决方案也适合你们。这让我发疯了。
答案 2 :(得分:0)
Git假定提交消息的UTF-8编码,我想这在你的系统上有点不同,这就是它看到\ 0字节的原因。请尝试以下方法:
git config --add i18n.commitencoding ISO-8859-1
git commit -m "Test message"
答案 3 :(得分:0)
不确定,是否有可能是commit-msg挂钩导致此行为?
虽然您说您重新克隆了存储库,但可以从存储库内部重新生成挂钩。
答案 4 :(得分:0)
我在SMB共享而不是Git上使用Mercurial遇到了这个确切的问题。这是一个干净安装的小牛队,但连接到一个运行Ubuntu的老式虚拟机 - 我最近几年从Snow Leopard连接到没有任何问题。 VM包含本地开发服务器。
每当我尝试提交一个较小的文件时,它会用空字节填充文件的末尾,导致Mercurial将文件视为二进制文件(我相信Mercurial将它们读作UTF-16但我'不是100%肯定)
它只会影响某些SMB共享,最终我设法将问题跟踪到smb.conf文件。
我通过将conf文件替换为来自另一个VM的工作文件并更新路径和用户来解决了这个问题。
当我运行testparm /etc/samba/smb.conf时,这是我工作文件的输出:
[global]
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
allocation roundup size = 0
cups options = raw
[webroot-c6]
comment = Webroot on Cent OS 6
path = /var/www/vhosts
force user = admin
force group = apache
read only = No
force create mode = 0755
force directory mode = 0755
case sensitive = Yes
follow symlinks = No
delete readonly = Yes
我仍然不确切知道哪些设置是问题 - 如果我有时间找出我会更新此帖子。
一路上我尝试了所有的一切,例如使用让小牛队使用smb1而不是smb2默认值,但切换到smb1没有任何区别 - 它正在更新smb.conf以解决问题而我现在正在使用smb2。 / p>
答案 5 :(得分:0)
我一直在使用OSX El Capitan与CentOS的SMB共享很长一段时间,突然间,当我缩短它们并保存它们时,我开始在文件末尾获得NUL字符。我查看了不同的修复程序。最终解决问题的方法是使用以下代码重新安装SMB。
yum install samba samba-client samba-common
之后我重新启动,一切都恢复正常。我不知道改变来自OSX或CentOS。这解决了我。
答案 6 :(得分:-1)
在Samba配置文件中禁用'unix extensions = off'选项:
#unix extensions = off
(它适用于我的debian-machine with Samba 2:3.5.6)