Liping's Blog

翁曰:「無他,但手熟爾。」

git push sge仓库到gitlab服务器失败问题

Son of Grid Engine的代码可以从gitlab镜像下载,但重新上传到其他git服务器的时候会出现下面的错误:

$ git push -u localnet_remote localbranch:master
Enumerating objects: 66150, done.
Counting objects: 100% (66150/66150), done.
Delta compression using up to 4 threads
Compressing objects: 100% (11531/11531), done.
remote: error: object 7c34c5f65a26b3b0af5d8333de795440b020b8a3: missingNameBeforeEmail: invalid author/committer line - missing space before email
remote: fatal: fsck error in packed object
error: remote unpack failed: index-pack abnormal exit
error: failed to push some refs to 'ssh://git@my.gitlab.server:2200/user_name/sge.git'

主要是因为有些commit不正常,邮件前面没有用户名,如下:

$ git fsck
Checking object directories: 100% (256/256), done.
error in commit 7c34c5f65a26b3b0af5d8333de795440b020b8a3: missingNameBeforeEmail: invalid author/committer line - missing space before email
error in commit 5ac4d64ce9877f62f3f88fecc87857939afcfdbb: missingNameBeforeEmail: invalid author/committer line - missing space before email
error in commit fa4808493876e94724b289d71d255f856add558f: missingNameBeforeEmail: invalid author/committer line - missing space before email
error in commit 982123e545a01d4966ee5699f9ba76830c7eeb01: missingNameBeforeEmail: invalid author/committer line - missing space before email
error in commit bdb56d00a3e42cf8f39e9c816a76d9079a39a488: missingNameBeforeEmail: invalid author/committer line - missing space before email
error in commit aed62a1c98026590366334e36cba75253135d168: missingNameBeforeEmail: invalid author/committer line - missing space before email
Checking objects: 100% (66259/66259), done.

$ git log
commit 5b2d275cf41f19a9653fae11978ad6d9c7cc1ba9
Author: Dave Love <d.love@liverpool.ac.uk>
Date:   Fri Sep 17 22:45:51 2010 +0000

    Fix MPI templates

commit 7c34c5f65a26b3b0af5d8333de795440b020b8a3 <= from newer
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 16:17:14 2010 +0000

    Don't use -Werror with gcc

commit 5ac4d64ce9877f62f3f88fecc87857939afcfdbb <=
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 21:52:08 2010 +0000

    Fix IZ2586: inst_sge missing error exit

commit fa4808493876e94724b289d71d255f856add558f <=
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 21:49:59 2010 +0000

    Fix IZ2980: rename SGE's `getline'

commit 982123e545a01d4966ee5699f9ba76830c7eeb01 <=
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 21:25:57 2010 +0000

    Debian's SPARC patch

commit bdb56d00a3e42cf8f39e9c816a76d9079a39a488 <=
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 21:25:16 2010 +0000

    Debian's PARISC patch (with conflict fixed)

commit aed62a1c98026590366334e36cba75253135d168 <= to older
Author:  <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 22:05:00 2010 +0000

    Comment fixes in jsv_include.sh

commit 77a5f4fe5b49ed7401b0e2bed6a1bb78cf36c04c
Author: Dave Love <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 22:00:59 2010 +0000

    Fix IZ3267: quoting in JSV sh library

commit 25ceb81fa11a1e629d6e6ab9a90c20978676a52a
Author: Dave Love <d.love@liverpool.ac.uk>
Date:   Sat Sep 4 20:45:58 2010 +0000

    Fix IZ3112 (swap memset args)

commit cbb7f8643b4857ddcf1470c5be3dd7e4320d9891 (tag: final_sunsource)

由于重写commit的历史需要把该commit以及更新的commit全部apply一遍,变动太大,而且会影响其他开发者,一般不建议。

可以用下面的方法忽略错误

$ cat .git/fsck_skipList
7c34c5f65a26b3b0af5d8333de795440b020b8a3
5ac4d64ce9877f62f3f88fecc87857939afcfdbb
fa4808493876e94724b289d71d255f856add558f
982123e545a01d4966ee5699f9ba76830c7eeb01
bdb56d00a3e42cf8f39e9c816a76d9079a39a488
aed62a1c98026590366334e36cba75253135d168

$ git config fsck.skipList .git/fsck_skipList

配置好后,本地再做git fsck就不报错了。

$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (66259/66259), done.

但上面的配置只在本地生效,对于git服务器来说,还需要在这个repository的目录底下,进行类似的配置

# ssh my.gitlab.server
# cd <repository_folder_in_git_server>
# git config receive.fsck.skiplist .git/fsck_skipList

这样配置完,再push就成功了。更多信息,可参考git-fsckgit-config

misc sge, git

Comments