问题标签 [gitattributes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 是否可以提交一个违反 .gitattributes 指定的行结束行为的文件?
如果将.gitattributes
文件添加到给定目录,则其内容完全相同:
是否有任何可能的方式可以将新文件或先前规范化的文件(例如所有 LF 行结尾)提交到该目录而不进行规范化?即,在指定模式启用后,是否有任何可能的方式可以将新的 CRLF 行结尾引入存储库?.gitattributes
text
再次解释一下,这个.gitattributes
文件是防止新的 CRLF 行被提交到包含该文件的目录中的文件的绝对万无一失的方法吗?我想说服我的同事该文件是完全足够的,并且没有必要采取进一步措施来排除 CRLF(例如服务器端挂钩)。*.txt
.gitattributes
.gitattributes
答案应该要么确认不可能覆盖由 指定的行尾行为.gitattributes
,要么提供一个反例来解释如何绕过.gitattributes
文件并潜入某些 CRLF 行尾。
linux - 是否可以根据环境变量使 .gitignore 可配置?
是否可以添加到 .gitignore 规则取决于环境变量?
例如
基本上我想要的是有一个存储库,这样if ENV_VAR = "AAA"
本地存储库就会有a.txt
,如果ENV_VAR
没有设置 a.txt 将被删除。
git - 如何创建 Git 属性文件
我想将属性文件添加到我的 Git 存储库中,如此处所述。它表明我应该包含.gitattributes
在我的存储库的根文件夹中。
只是
.gitattributes
一个文件还是一个文件夹?如何创建此文件/文件夹?Windows 引发以下错误:
“无法创建没有文件名的文件”
“您必须输入文件名”
应该在哪里添加文件?在存储库根目录下
X:\PATH\TO\Repository\
,或 Git 文件夹下,X:\PATH\TO\Repository\.git\
?是否会为其他贡献者克隆/分叉我的存储库强制执行这些属性?
例如,如果我推送到 GitHub 或 GitLab 并且其他方拉下一个副本,我添加的属性是否也会在他们的机器上强制执行?
相关: Git 忽略
注意:如果有帮助,我会在 Windows 平台上使用TortoiseGit和 msysgit。
windows - 在 git 中更改分支错误地导致文件被修改
我在 Windows 上使用 git (1.8.3)。如果我从 github 克隆一个 repo,然后立即在该 repo 上签出一个不同的现有分支,git 会检测到修改过的文件。通常. 有时它不会。所有修改后的文件的差异都相同(包括行尾)。在我的团队中至少有 4 台不同的 PC 上的 2 个不同的存储库中观察到了这个问题。
它并不总是相同的文件,但它几乎总是代表中的几个文件子集之一。例如,有时在 repo 的根目录中有相同的 5 个文件,有时在一个特定文件夹中相同的 93 个文件,有时在不同文件夹中相同的 16 个文件。
一旦 git 将文件标记为已修改,如果我还原或存储它们,它们会立即再次标记为已修改,这使得无法在分支之间来回切换。
我感觉它与行尾有关,但我已经添加了推荐的 .gitattributes 文件并重新规范了每个分支,但我仍然有这些零星的问题。我想到的另一种可能性是分支之间的合并以某种方式弄乱了我所做的重整化,但我不知道如何测试该理论。
我们都拥有core.autocrlf=true
,因为我们都在 Windows 上。这是我们的 .gitattributes
python - 为什么从命令行与 git 属性调用脚本的行为不同?
更新的脚本附在下面,这些现在正在处理我的示例文档
为什么以下 python 脚本在通过 git 属性或命令行调用时执行不同?
我有两个基于 mercurial zipdoc 功能建模的脚本。我要做的就是解压缩存储中的 docx 文件(filter.clean)并在恢复时压缩它们(filter.smudge)。我有两个脚本运行良好,但是一旦我将它们放入 git 属性,它们就不起作用,我不明白为什么。
我已经通过执行以下操作进行了测试
测试脚本(git bash)
$ cat original.docx | python ~/Documents/pyscripts/unzip.py > uncompress.docx
$ cat uncompress.docx | python ~/Documents/pyscripts/zip.py > compress.docx
$ md5sum uncompress.docx compress.docx
我可以用 Microsoft Word 打开未压缩和压缩文件,没有错误。脚本按预期工作。
测试 Git 属性
- 我将 clean 和 scrub 都设置为cat,验证了我的文件保存和恢复没有问题。
- 我将 clean 设置为python ~/Documents/pyscripts/unzip.py。提交和签出后,文件现在更大(未压缩),但在 MS-Word 中打开时出错。此外,md5 与上面的“仅脚本”测试不匹配。虽然文件大小相同。
- 我将 clean 设置回cat并将 Scrub 设置为python ~/Documents/pyscripts/zip.py。提交和签出后,文件现在更小(压缩),但在 MS-Word 中打开时再次出错。同样,md5 与“仅脚本”测试不同,但文件大小匹配。
- 正如预期的那样,将清理和清理都设置为 python 脚本会产生错误。
我真的迷路了,我认为 git Attributes 只是在标准输入上提供输入并从标准输出中读取它。我已经测试了这两个脚本以使用来自 cat 的管道和来自输出的重定向。我知道脚本正在运行 b/c 文件按预期更改大小,但是在文件中的某处引入了一个小更改。
附加参考
我在 Win7 上使用 msgit,上面的所有命令都输入到 git bash 窗口中。
解压脚本
压缩脚本
编辑:格式化 编辑 2:脚本更新为在文件处理期间写入内存而不是标准输出。
git - .gitattributes 模式中的空格
我正在为 git 编写一些使用smudge/clean filters的工具,因此我必须在.gitattributes
文件中创建条目。
不幸的是,该文件很简单地通过在空格上拆分来解析,因此我似乎不可能在模式中包含明确的空格字符。
我一直在用 替换空白字符?
,它再次匹配零个或一个字符。
因此,一个模式has?spaces
将与我的目标文件名匹配has spaces
,但也匹配hasspaces
。
有没有办法只匹配空格,还是我坚持接近匹配?
git - 如何在 git add 之前自动调用脚本?
这是我的用例:我在我的 Git 存储库中提交 PNG 和其他内容。我想对我想提交的每个 PNG 应用一个特定的过程,这是我最终要提交的过程的结果(潜在的修改后的 PNG)。
一开始我想到了一个钩子(比如 a pre-commit
),但这有点奇怪,因为这个过程会改变文件,所以我需要重新添加它!根据我阅读的内容,没有pre-add
钩子(或类似的东西)。
可能的解决方案是创建一个 git 别名?但我不想改变——太多——人们的工作方式,我正在寻找一种顺畅透明的方式。
如果你有线索......即使线索是改变我的流程想法。
php - 由于 gitattributes 通过 composer 安装 symfony/symfony 时出错
我要发布这个,然后发布答案,因为它让我发疯,直到我弄清楚这个问题。
通过 composer 安装 symfony/symfony 时,由于这个错误,进程反复中止:
我知道这与 git 在克隆上更改空格或行尾有关,然后当它尝试签出特定提交时,它会失败,因为行尾现在已更改。git config core.autocrlf input
没有帮助。
git - 为什么“git status”会忽略 .gitattributes clean 过滤器?
我有一个.gitattributes clean 过滤器,可以在提交之前从文件中删除所有评论。
我有一个包含以下内容的文件“测试”(在存储库中提交):
现在我对“测试”进行修改并添加注释:
git status
现在告诉我:
但是git diff
是空的(应该如此)。
我并不完全清楚为什么 git status 不使用过滤器来决定文件是否已被修改,但我认为这就是它的实现方式。
对我来说真正神秘的是:
如果我这样做:
然后突然文件'test'不再被标记为已修改并且它没有出现在git索引中。为什么是这样?