为什么我的.gittributes文件不能在我的Mac上运行?
试图实现基于终端的工作流,在Github和Git方面变得更加流利,我想通过终端将所有本地AppleScript应用程序和脚本上传到存储库。初始测试上传时,任何带有为什么我的.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
.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文件呈现为文本而不是二进制文件的正确方法是什么
编辑:
建议使用注释,以便Igit 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下的二进制文件,只有一个人可以编辑,或者会被损坏