问题标签 [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.

0 投票
1 回答
113 浏览

git - .gitattributes 文件 - 防止文件被合并但仍然查看差异

我正在处理一些我想防止被合并的非常尴尬的 XML 文件。我知道我可以使用-diff.gitattributes 中的标记来做到这一点。但是,如果可能的话,我仍然希望能够读取 gitk 中的差异。

有没有一种简单的方法可以做到这一点?

0 投票
0 回答
484 浏览

git - 无法签出 .gitattributes

我遇到了一个奇怪的问题,我无法从远程签出 .gitattributes。最近添加了 .gitattributes 文件,我想将其拉入并进行一些更改。我做到了git pull,它说我的分支是最新的,但该文件没有出现在我的本地机器中(ls -al没有显示 .gitattributes)。我试过了git checkout origin .gitattributes,它说它不匹配任何文件。但如果我这样做git rm .gitattributes,则git status表明 .gitattributes 已上演以供删除。有谁知道如何解决这个问题?

编辑:

这是我的 .gitattributes

0 投票
2 回答
330 浏览

git - gitattributes:匹配两个名称几乎相同的文件,不同之处仅在于附加的固定字符串

背景

使用 smarty 模板时,您可以通过创建文件副本并添加字符串-USERMOD来覆盖文件,如下所示:

有没有办法在我的 .gitattributes 文件中定位这两个文件?

只针对第二种类型的文件很容易:

从字面上看,规则是这样的:
“如果有任何以 -USERMOD.original_extension 结尾的文件的副本,则忽略副本原始文件”

当然,我总是可以手动添加这些文件,但是自动化的解决方案会很好。

gitignore(5) 的手册页(由 gitattributes(5) 引用以解释模式匹配)说:

否则,Git 将模式视为适合 fnmatch(3) 使用并带有 FNM_PATHNAME 标志的 shell glob

据我所知,shell glob 不能满足我的需要。然而,最终目标是告诉 git 导出忽略 USERMOD 文件及其原件,因此任何解决此问题的解决方案都将被接受。

0 投票
1 回答
352 浏览

git - 如何让 git 除了特定文件类型之外不进行任何行结束转换

我希望 git 除了特定文件(比如.c.h)之外不要进行任何行尾转换。我想完成它,.gitattributes这样我就可以覆盖用户机器上的任何环境。这主要针对 Windows 客户端。

我想要这样的东西:

但是 git 只是忽略了第一行之后的所有内容(它根本不执行任何行结束操作)。

有没有办法做到这一点?

0 投票
1 回答
597 浏览

git - gitattributes - 如何识别没有扩展名的 bash 脚本文件

我刚刚开始使用 git。我一直在使用https://github.com/Danimoth/gitattributes中的示例为我的各种项目(主要是 bash 和 python 脚本)组合一个 gitattributes 文件。我的问题是我的大多数 bash 脚本都没有文件扩展名。有没有我可以用来明确选择这些的模式(例如过滤器)?或者使用 .sh 扩展名重命名它们会更容易吗?

0 投票
1 回答
178 浏览

ruby-on-rails - 如何使服务器在收到未加密的推送后自动推送到加密的 Git 存储库

我们公司有一个基于 Rails 的软件的 SVN 存储库。

我们还有一个手动更新的加密存储库——拉取未加密,使用 RubyEncoder 编码,推送到加密。

我们大部分时间都过渡到了 Git,并且想让这个过程自动化,我想让这个过程自动化,并且每次提交。

所以

  1. 服务器收到推送到未加密的任何分支
  2. 服务器过滤器更改了 .rb 文件,通过 Rubyencoder 传递它们
  3. 加密的 .rb 文件和其他文件被推送到加密存储库,保留提交消息,因此提交比率为 1:1
  4. 分支创建和删除也被镜像。

与 git-encrypt 之类的解决方案不同,我们将其解释为不安全的是客户的通勤者,而不是代码存储库。

我的第一次尝试是一个很长的 post-receive 钩子,它很慢并且分支不能正常工作,所以我放弃了它。

我的第二次尝试是设置*.rb = rubyencode和设置cleansmudge过滤器。虽然可以将 RubyEncoder 设置为在 /dev/stdin 上输入并在 /dev/stdout 上输出,但似乎这些会影响磁盘上的文件而不影响 git 历史记录,每次收到推送都需要再次提交。

如果 clean/smudge 按预期工作,服务器本地的拉取和推送(git remote origin add git@git.work.com:product/work_unencrypted.gitgit remote set-url origin --push git@git.work.com:product/work_encrypted.git让它从预期的存储库中推送和拉取)将由 post-recieve 钩子触发。

我已经迷失了,我什至不知道此时要问的正确问题。也许这是如何逐步完成和修改提交以保持 1:1 的历史?

0 投票
1 回答
938 浏览

git - 如何为所有子文件夹设置以 git 属性结尾的行

我的 git 存储库包含一些 Windows 和 Linux 文件。例如,

Windows 和 Linux 文件夹都包含许多子文件夹和许多不同类型的扩展(例如源代码、文本文件、tarball、二进制文件等)

如何设置 gitattribute 以便在我签出存储库时,Windows 文件夹中的所有文件都将设置为 eol=crlf,而 Linux 文件夹将设置为 eol=lf?

此外,如何在不将更改推送到远程存储库的情况下测试更改?

0 投票
1 回答
459 浏览

git - 让 git 只跟踪文件中的某些行

我对 gitattributes 感到困惑。

我不确定我正在尝试做的事情是否可行:我的 IDE 正在为我的项目生成一个设置文件,并且该文件会经常更新。它基本上是一个文本文件,但建议不要在文本模式下编辑它。我允许我自己添加和编辑文件的某些部分,但我让 IDE 的 GUI 完成其余的工作,否则我可能会遇到问题。

部分文件由 GUI 更改,其中一些由我更改。我希望 git 忽略 GUI 所做的更改或添加的行,但跟踪我所做的更改。

我可以适应 GUI 和反之亦然的变化的模式。例如,下面的命令只能打印我想告诉 git 跟踪的行:

egrep -v (WORDS|THAT|APPEAR|IN|LINES|I|DON'T|WANT|GIT|TO|TRACK) <setting-file>

我在gitattributes 这里这里遇到过。所以我用上面的命令创建了一个过滤器,我把它放在我smudge的. 我已经设法使它工作,但问题是:我不希望 git 实际删除未通过过滤器的行。我只想让 git 忽略对这些行的任何更改。clean~/.gitconfig

希望我说清楚了。

0 投票
1 回答
597 浏览

git - 结帐时忽略 .gitattributes

JGit 不支持.gitattributes. 关于该主题有一个5 岁的错误

因此, JGit(扩展)ident不使用宏。$Id

如果您使用git支持.gitattributesandident的常规控制台检出分支,则会发生宏扩展。如果你这样做git blame,它不会看到与$Id$宏的行有差异。这是预期的。

如果你然后jgit blame在同一个 repo 上做,你会得到Not Committed Yet包含$Id$宏的行。

我在调查 Sonarqube 的 Git 插件问题时发现了这一点。那里友好的人打开了一个错误来跟进。

我的问题:我如何告诉常规在结帐git时忽略?.gitattributes 额外加分:我需要在 Jenkins 中执行此操作,因此最好开箱即用,对 Jenkins Git 插件进行一些操作。

老实说:我对一个肯定的答案没有寄予厚望。最好的事情是 JGit 齐心协力并支持.gitattributes. 但这不是发牢骚的地方。

0 投票
0 回答
477 浏览

git - Git clean/smudge filters for ansible vault secrets

我正在尝试在 git 中设置清洁/涂抹过滤器,以通过ansible-vault命令自动加密和解密包含机密的文件。

ansible-vault 命令的特殊之处在于它不是幂等的(每次在相同数据上调用它时都会创建不同的二进制文件)。

我从这个博客页面中建议的实现开始。不幸的是,它不能正常工作,因为每当调用 smudge 时(无论是 git checkout ,还是只是 git status ),即使不是,秘密文件看起来也为 git 修改过。

所以我想知道 git 是否会将他在索引中的二进制文件与干净过滤的当前文件进行比较,我尝试在这些脚本上构建,如下所示:

这里的区别在于它尝试比较纯文本(未加密)机密文件的当前版本和 HEAD 版本,并且只有在它们不同的情况下才会输出使用 ansible-vault 加密的新二进制 blob。

不幸的是,在此更改之后,git 继续认为秘密文件总是被修改。即使git add再次 ing 文件,以便计算 git blob,git 仍认为文件不同,并让更改进入提交。请注意,git diff应返回空更改。

作为参考,这是污迹:

这是差异: