什么是 git 锚链?

What is git hawser?

我最近发现我的 .gitconfig 被附加了以下几行:

[filter "hawser"]
    clean = git hawser clean %f
    smudge = git hawser smudge %f
    required = true

既然是版本控制的,我确定我没有添加它们。看来我是 not the only 拥有这些台词的人。

然而:git: 'hawser' is not a git commandgit help 没有提供任何额外信息。

那么,这个“锚链”过滤器是什么?

这似乎是为 Mac 安装 GitHub 的结果。至少,这是我从阅读 this commit message.

中得到的信息

我发现 .gitconfig 中的更改恰好与 github 的 mac 更新一致,这就是为什么我在我的回购协议中将其标记为这样的原因。

至于 Hawser 实际上是什么,Github for mac 将其捆绑在 /Applications/GitHub.app/Contents/Resources/hawser/bin/git-hawser 路径中。

运行 具有 --help=false 的可执行文件产生:

git-hawser/0.4.0 (GitHub; darwin amd64; git 2.3.0; go 1.3)

Usage: 
  git-hawser [flags]
  git-hawser [command]

Available Commands: 
  add                       Add an entry to .gitattributes
  clean                     Implements the Git clean filter
  env                       Show the current environment
  init                      Initialize the default Git Media configuration
  logs                      View error logs
  ls-files                  Show information about hawser files
  path                      Manipulate .gitattributes
  push                      Push files to the hawser endpoint
  rm                        Remove an entry from .gitattributes
  remove                    Remove an entry from .gitattributes
  smudge                    Implements the Git smudge filter
  status                    Show information about hawser files that would be pushed
  update                    Update local hawser configuration
  version                   Show the version number
  help [command]            Help about any command

 Available Flags:
      --help=false: help for git-hawser

Use "git-hawser help [command]" for more information about that command.

运行 strings 在 GitHub.app 中的一些可执行文件中出现了字符串 git-media|hawser 除了使用信息外,它还坚定地表明 git-hawser 是 git-media 的分支或重新实现,用于在 git 存储库之外存储大文件,因为 github 有 a hard 100MB file size limit。我现在正在测试,看看如果您尝试通过 GitHub.app.

上传一个大文件会发生什么

原来 GitHub.app 在处理大文件时不会自动使用 git-hawser,但是 strings 显示它确实有能力与 git-缆绳进程。

安装命令行工具会安装 github 工具和 git-hawser/usr/local/bin。 运行 git-hawser version -c 给出:

git-hawser/0.4.0 (GitHub; darwin amd64; git 2.3.3; go 1.3)
Nothing may see Gah Lak Tus and survive!

这似乎是相关的:https://github.com/blog/1986-announcing-git-large-file-storage-lfs

瞧,hawser 过滤器被复制为 lfs(大文件支持):

[filter "lfs"]
  clean = git lfs clean %f
  smudge = git lfs smudge %f
  required = true

最近我遇到了同样的问题,我浏览了这个网站 https://git-lfs.github.com/?utm_source=github_site&utm_medium=blog&utm_campaign=gitlfs

如果您是 windows 用户,以下步骤可能会解决您的问题。

  1. 下载 windows
  2. 的 exe
  3. 安装它
  4. 'git lfs install' 运行 此代码在 git 命令中。

现在尝试推送更改。

hawser 是 Git LFS 的旧名称(git-media 是更旧的名称),所以我认为可以删除它。

用谷歌搜索真的很难,但我终于找到了将项目从 hawser 重命名为 lfs (https://github.com/github/git-lfs/commit/e37b69547710e2a341bc7904d291029ac594b3be) 的提交,另一个提到了旧的 git-media 名称 (https://github.com/github/git-lfs/commit/eac36d7f04074882a7e3c9ad2cfc1d4f4a7b08fd).

因此,在 ~/.gitconfig 中的这些块中,删除 "media" 和 "hawser" 块应该是安全的,尤其是在安装 git-lfs 之后.换句话说,从这个配置块:

[filter "media"]
        required = true
        clean = git media clean %f
        smudge = git media smudge %f
[filter "hawser"]
        clean = git hawser clean %f
        smudge = git hawser smudge %f
        required = true
[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        required = true

你可以去

[filter "lfs"]
        clean = git-lfs clean -- %f
        smudge = git-lfs smudge -- %f
        required = true