这是一篇很长的文章,因为我试图包括尽可能多的细节。
我试图在Bitbucket中使用GIT LFS,但是由于某些奇怪的原因,我无法将任何二进制文件推送到LFS
考虑用于测试的文件:
jar,例如exe,tar.gz,zip,.aff和.dic。每个文件大小和字典文件(非二进制文件)的.aff和.dic文件大小约为30 MB
当我使用git lfs时,在推送上述文件(.aff和.dic文件除外)时,它总是会引发错误。我是否要为LFS跟踪它们都没有关系。但是,如果我不使用lfs,则可以将所有文件推送到bitbucket(git)。
使用lfs时,它永远不会在.git / lfs / objects文件夹中为二进制文件创建指针,这在推送时会产生问题。
这是我遵循的测试步骤:
将存储库克隆到本地
git clone ssh://git@git..com/~/gitlfs_test.git
初始化lfs
cd / home // gitlfs_test /; git lfs install
初始化lfs跟踪
git lfs track "*/**/*.jar" ;
git lfs track "*/**/*.tar.gz" ;
git lfs track "*/**/*.zip" ;
git lfs track "*/**/*.so" ;
git lfs track "*/**/*.aff" ;
git lfs track "*/**/*.dic" ;
git lfs track "*/**/*.exe" ;
git add .gitattributes
git commit –m “commit 1”
git push origin master
(成功推送)
将上述文件从其他来源复制到文件夹:
bash-4.1$ pwd
/home/<user>/gitlfs_test
mkdir jar so exe dict
mkdir –p zipped/tar/;
mkdir zipped/zip;
for file in `find /home/backup -name '*.so'`; do cp $file so/;done
for file in `find /home/backup -name '*.tar*'`; do cp $file zipped/tar/;done
for file in `find /home/backup -name '*.zip*'`; do cp $file zipped/zip/;done
for file in `find /home/backup -name '*.aff*'`; do cp $file dict/;done
for file in `find /home/backup -name '*.dic*'`; do cp $file dict/;done`
git add –all
git commit –m “commit 2”
git push origin master -- > push fails for jar files
localhost{<user>}/home/<user>/gitlfs_test=> git push origin master
b060a124dc0793068e83bb6facf6fcedf3ee57fd657764a07e8622 does not exist in .git/lfs/objects. Tried jar/SybDriver.jar, which matches b060a124dc0793068e83bb6facf6fcedf3ee57fd657764a07e8622.
error: failed to push some refs to 'ssh://git@git.<myurl>.com/~<user>/gitlfs_test.git'
我在许多博客中添加了步骤6,7和8,建议在推送实际文件之前先推送.gitattributes文件。
即使我将.gitattributes文件与其他文件一起推送,也就是即使我跳过第6-8步,我也会遇到错误。
在步骤10中,如果我仅添加“ .aff”和“ .dic”文件(在./git/lfs/objects文件夹中创建了指针),则按成功。
现在这是最令人震惊的测试结果:我只对jar,aff和dic文件进行了相同的测试,并且仅对aff和dic文件进行了跟踪
不仅如此,即使我尝试仅为jar文件创建lfs存储库,但不跟踪任何文件,推送也会失败。请查看结果如下:
localhost{<user>}/home/<user>=> git clone ssh://git@git.<myurl>.com/~<user>/gitlfs_test2.git
Cloning into 'gitlfs_test2'...
warning: You appear to have cloned an empty repository.
localhost{<user>}/home/<user>=> cd gitlfs_test2
localhost{<user>}/home/<user>/gitlfs_test2=> ls -la
total 12
drwxrwxr-x 3 <user> users 4096 Jul 19 13:07 ./
drwxrwxr-x 18 build users 4096 Jul 19 13:06 ../
drwxrwxr-x 7 <user> users 4096 Jul 19 13:07 .git/
localhost{<user>}/home/<user>/gitlfs_test2=> bash
bash-4.1$ mkdir jar
bash-4.1$ for file in `find ../home/backup -name '*.jar'`; do cp $file jar/;done
bash-4.1$ exit
exit
localhost{<user>}/home/<user>/gitlfs_test2=> ls -lrt .git
total 32
drwxrwxr-x 2 <user> users 4096 Jul 19 13:07 branches/
drwxrwxr-x 2 <user> users 4096 Jul 19 13:07 hooks/
drwxrwxr-x 2 <user> users 4096 Jul 19 13:07 info/
drwxrwxr-x 4 <user> users 4096 Jul 19 13:07 refs/
-rw-rw-r-- 1 <user> users 73 Jul 19 13:07 description
-rw-rw-r-- 1 <user> users 23 Jul 19 13:07 HEAD
drwxrwxr-x 4 <user> users 4096 Jul 19 13:07 objects/
-rw-rw-r-- 1 <user> users 273 Jul 19 13:07 config
localhost{<user>}/home/<user>/gitlfs_test2=> git lfs install
Updated pre-push hook.
Git LFS initialized.
localhost{<user>}/home/<user>/gitlfs_test2=> ls -lrt .git
total 36
drwxrwxr-x 2 <user> users 4096 Jul 19 13:07 branches/
drwxrwxr-x 2 <user> users 4096 Jul 19 13:07 info/
drwxrwxr-x 4 <user> users 4096 Jul 19 13:07 refs/
-rw-rw-r-- 1 <user> users 73 Jul 19 13:07 description
-rw-rw-r-- 1 <user> users 23 Jul 19 13:07 HEAD
drwxrwxr-x 4 <user> users 4096 Jul 19 13:07 objects/
-rw-rw-r-- 1 <user> users 273 Jul 19 13:07 config
drwxr-xr-x 4 <user> users 4096 Jul 19 13:08 lfs/
drwxrwxr-x 2 <user> users 4096 Jul 19 13:08 hooks/
localhost{<user>}/home/<user>/gitlfs_test2=> ls -lrt
total 4
drwxrwxr-x 2 <user> users 4096 Jul 19 13:08 jar/
localhost{<user>}/home/<user>/gitlfs_test2=> ls -la
total 16
drwxrwxr-x 4 <user> users 4096 Jul 19 13:07 ./
drwxrwxr-x 18 build users 4096 Jul 19 13:06 ../
drwxrwxr-x 8 <user> users 4096 Jul 19 13:08 .git/
drwxrwxr-x 2 <user> users 4096 Jul 19 13:08 jar/
localhost{<user>}/home/<user>/gitlfs_test2=> git add --all
localhost{<user>}/home/<user>/gitlfs_test2=> git commit -m "commit 1"
[master (root-commit) ce7010b] commit 1
14 files changed, 42 insertions(+)
create mode 100644 jar/SybDriver.jar
create mode 100644 jar/aaaa.jar
create mode 100644 jar/bbbb.jar
create mode 100644 jar/cccc.jar
create mode 100644 jar/dddd.jar
create mode 100644 jar/eeee.jar
create mode 100644 jar/ffff.jar
create mode 100644 jar/gggg.jar
create mode 100644 jar/hhhh.jar
create mode 100644 jar/iiii.jar
create mode 100644 jar/jjjj.jar
create mode 100755 jar/kkkk.jar
create mode 100644 jar/llll.jar
create mode 100644 jar/mmmm.jar
localhost{<user>}/home/<user>/gitlfs_test2=> git push origin master
b060a124dc0793068e83bb6facf6fcedf3ee57fd657764a07e8622 does not exist in .git/lfs/objects. Tried jar/SybDriver.jar, which matches b060a124dc0793068e83bb6facf6fcedf3ee57fd657764a07e8622.
error: failed to push some refs to 'ssh://git@git.<myurl>.com/~<user>/gitlfs_test2.git'
请注意,如果我创建一个非二进制文件并将扩展名更改为.jar,则git push(初始化lfs时)会成功。也就是说,如果我跟踪.jar文件,则会在.git / lfs / objects文件夹中创建指针。
此外,尺寸也不成问题。 .aff和.dic文件的大小单位为MB,而jar文件的大小单位为KB。
仅当我使用二进制文件并尝试将其作为LFS推送到bitbucket时,问题才会发生。
我没有使用github,因为这在我的办公室不可用。
感谢您的帮助!
非常感谢!