gpt4 book ai didi

git - 为什么我的 .gitattributes 文件不能在我的 Mac 上运行?

转载 作者:行者123 更新时间:2023-12-05 07:37:35 25 4
gpt4 key购买 nike

尝试实现基于终端的工作流程,在 Github 和 Git 上变得更加流畅,我想通过终端将所有本地 AppleScript 应用程序和脚本上传到存储库。在初始测试上传时,任何带有 .scpt 扩展名的内容都被视为二进制文件,不会呈现为原始文件,但只允许下载以查看原始文件。

因此研究一种将二进制文件转换为文本的方法,以便我可以利用版本控制,我发现“Should the .gitattributes file be in the commit?”并且:

我使用以下方法在终端本地克隆我的存储库:

git clone https://github.com/user/foobar.git

cd 进入该目录后,我执行以下操作:touch .gitattributes

验证文件在那里:ls -a

打开文件:open .gitattributes

将以下内容添加到 .gitattributes:

## Explicitly declare text files you want to always be normalized and converted to native line endings on checkout.
*.scpt text

## Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

回到终端,我执行 git commit -am "adding gitattributes"

运行 git push

在浏览器中,我验证文件 .gitattributes 是否存在并且我可以将其视为文本。

我将 foobar.scpt 添加到我的本地目录。在终端中,我运行 ls -a 来验证 foobar 是否存在。运行 git add foobar.scpt 然后使用 git commit -am "adding test script"git push

当我在浏览器中打开文件 foobar.scpt 时,它仍然指示我只能下载以查看原始文件。进一步研究我发现:

我已经尝试了上面的方法:

  • .gitattributes 添加到我的本地作为 .git/info/.gitattributes
  • .gitattributes 作为 .git/info/gitattributes 添加到我的本地以复制 exclude 文件的外观。

我已将 gitattributes 文件参数更改为:

  • *.scpt 文本
  • *.scpt 差异

在尝试了以上所有方法后,我仍然无法将某些文件作为文本而不是二进制文件获取。在本地创建 gitattributes 文件并将其推送到主服务器以便 Mac 文件将呈现为文本而不是二进制文件的正确方法是什么?


编辑:

建议评论How would you put an AppleScript script under version control?所以我 git rm foobar.scptgit commit -am "removed test"git push

在本地删除 foobar 后,我将 ..gitattributes 更新为:

## Explicitly declare text files you want to always be normalized and converted to native line endings on checkout.
*.scpt diff=scpt

## Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

添加到我的配置文件(在本地 .git/config 下):

[diff "scpt"]
textconv = osadecompile
binary=true

我创建了一个名为 test.scpt 的新脚本文件并通过浏览器和终端上传到,但仍然是原始文件。我做错了什么?

最佳答案

根据您的描述,我不能完全确定 .scpt文件本质上是“部分”或“完全”二进制的。

  • 如果它们是“完全”二进制的,ala dat , exebin格式,然后使用 Git LFS这样对待他们。

    git lfs install         # Installs the Git LFS hooks into you ./.git/ folder
    git lfs track "*.scpt" # Registers the *.scpt file extention as a binary format

    注意:双引号必须应用于所有*.scpt文件不仅仅是项目根目录中的文件

    这将使用通常的 Git 工作流程跟踪对文件的更改,因此您可以回滚到某个先前的状态。据我了解,Git LFS 按原样存储整个文件,并且不会像 git 那样跟踪更改,请考虑每个文件的多个副本/克隆。大文件很快会导致存储库变大,因此必须定期清除旧文件,从而丢失一些历史记录。

  • 如果它们是“部分”二进制,ala pdfdocx ,然后可以使用 .gitattributes 为他们配置“读者” . Martin Fenner's article很好地涵盖了这一点(我不会链接四处飘荡的剽窃副本)。本质上他使用 .gitattributes*.scrpt 识别不同的差异工具和编辑器文件和 .gitconfig指定这些工具。

    • PATH/TO/Repository/.gitattributes

      *.docx diff=scptdiff
    • SOME/PATH/.gitconfig (我不记得 .gitconfig 住在哪里)

      [diff "scptdiff"]
      textconv=SCPT2TEXT ...
      prompt = false
      [alias]
      scptdiff =SCPTDIFF ...

    注: SCPT2TEXT代表 *.scpt阅读器/转换器和 SCPTDIFF *.scpt差异工具和 ...他们的参数不包括文件名

    这里是文件的 git 版本控制。它将为您跟踪更改,但可能会在 merge 期间导致问题;我有一段时间没有使用它了,但我记得它运行良好。

  • 使用 .gitattributes也可以将文件标记为二进制文件,在这种情况下,git 将简单地复制文件但不跟踪任何更改。两个人编辑文件最终会覆盖彼此的工作。这更适用于不经常更改的数据文件。

我个人怀疑您的问题更多地与行结尾有关。您似乎正在从 CRLF 更改至 LF , 或相反亦然。当您推送到中央存储库时,这可能会破坏 scpt 格式。在推送过程中,行尾被转换并且文件“损坏”,然后您从服务器下载“损坏”文件却发现它真的被损坏了;这可能就是为什么它们在 Web 界面中不“可见”的原因。如果您恢复损坏文件中的行结尾,您将再次获得原始的“固定”文件。

我的规则是在 Windows <-> Linux 之间切换行结尾把它们留给Linux <-> Linux ;将服务器视为 Linux盒子;治疗 Mac OS作为Linux .在系统/本地/用户中设置 .gitconfig .只有在确实需要时才启用,text/crlf ,或禁用,text/crlf , 线端切换共在.gitattributes例如git 下的二进制文件,只有一个人可以编辑,否则会损坏。

同事也可能会破坏文件,因为他们在 pull 时进行转换,而在推送时不进行转换,反之亦然。再次在 .gitattributes 中启用/禁用它.

注意:这并没有完全回答问题;如有必要,请询问更多信息。另外,我不在 Mac OS 上工作,所以我可能会做一些事情

关于git - 为什么我的 .gitattributes 文件不能在我的 Mac 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com