使用Bitbucket LFS

时间:2018-07-24 14:33:52

标签: git bitbucket git-lfs

这是一篇很长的文章,因为我试图包括尽可能多的细节。

我试图在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仓库(使用Bitbucket UI)
  • 在设置中启用LFS(使用Bitbucket UI)
  • 将存储库克隆到本地

    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文件夹中创建了指针),则按成功。

  • 如果我不是创建git clone,而是创建一个文件夹并继续进行活动,直到git commit,然后使用git remote添加存储库,我都会得到相同的结果。
  • 现在这是最令人震惊的测试结果:我只对jar,aff和dic文件进行了相同的测试,并且仅对aff和dic文件进行了跟踪

    • 如果我仅使用lfs添加(git add)aff和dic文件,则git push可以正常工作。
    • 如果我使用git add添加所有3种类型的文件,即使我不跟踪jar,也会遇到与步骤12相同的错误。简而言之,无论如何,我都无法将二进制文件推送到git。
  • 不仅如此,即使我尝试仅为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,因为这在我的办公室不可用。

感谢您的帮助!

非常感谢!

0 个答案:

没有答案