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

为什么我的.gittributes文件不能在我的Mac上运行?,git,macos,github,version-control,text-files,Git,Macos,Github,Version Control,Text Files,试图实现基于终端的工作流,在Github和Git方面变得更加流利,我想通过终端将所有本地AppleScript应用程序和脚本上传到存储库。初始测试上传时,任何带有.scpt扩展名的内容都将被视为二进制文件,不会呈现为原始文件,只允许下载以查看原始文件 因此,我正在研究一种将二进制文件转换为文本的方法,以便利用我发现的版本控制“”和: 我使用以下方法在终端本地克隆我的回购: git clone https://github.com/user/foobar.git 在cd进入该目录后,我会:tou

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

因此,我正在研究一种将二进制文件转换为文本的方法,以便利用我发现的版本控制“”和:

我使用以下方法在终端本地克隆我的回购:

git clone https://github.com/user/foobar.git
cd
进入该目录后,我会:
touch.gittributes

*.docx diff=scptdiff
已验证的文件存在:
ls-a

打开文件时使用:
open.gittributes

*.docx diff=scptdiff
将以下内容添加到
.gittributes

## 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提交-am“addinggittattributes”

运行git推送

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

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

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

我已经用以下方法尝试了上述方法:

  • .gittributes
    作为
    .git/info/.gittributes
  • .gittributes
    作为
    .git/info/gittributes
    添加到我的本地文件,以复制
    排除
    文件的外观
我已将
gittributes
文件参数更改为:

  • *.scpt文本
  • *.scpt diff
在尝试了以上所有操作之后,我仍然无法将一些文件作为文本而不是二进制文件。在本地创建
gittattributes
文件并将其推送到主文件以使Mac文件呈现为文本而不是二进制文件的正确方法是什么


编辑:

建议使用注释,以便I
git rm foobar.scpt
git commit-am“removed test”
git push

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

## 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
下):


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

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

  • 如果它们是“完全”二进制、ala
    dat
    exe
    bin
    格式,则使用将它们视为完全二进制

    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
    pdf
    docx
    ,则可以使用
    .gittributes
    为它们配置“读卡器”。很好地涵盖了这一点(我不会将剽窃的副本链接起来)。基本上他使用
    .gittributes
    *.scrpt
    文件识别不同的diff工具和编辑器,并为
    .gitconfig
    指定这些工具

    • PATH/TO/Repository/.gittributes

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

    注意:
    SCPT2TEXT
    表示
    *.scpt
    读取器/转换器和
    SCPTDIFF
    表示
    *.scpt
    diff工具和
    ..
    它们的参数,不包括文件名

    这里是git对文件的版本控制。它将为您跟踪更改,但在合并过程中可能会导致问题;我已经有一段时间没用过这个了,但我记得它工作得很好

  • 使用
    .gittributes
    还可以将文件标记为二进制文件,在这种情况下,git只需复制文件,而不跟踪任何更改。两个人编辑文件最终会覆盖另一个人的工作。这对于不经常更改的数据文件意味着更多

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

我的规则是在
windowslinux
之间切换行尾,并将它们留给
Linux
;将服务器视为
Linux
框;将
Mac OS
视为
Linux
。在系统/local/user
.gitconfig
中设置此选项。仅在确实必要时,然后启用,
text/crlf
,或禁用,
text/crlf
,在
.gittributes
中完全切换行尾。例如,git下的二进制文件,只有一个人可以编辑,或者会被损坏