问题标签 [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 文件 - 防止文件被合并但仍然查看差异
我正在处理一些我想防止被合并的非常尴尬的 XML 文件。我知道我可以使用-diff
.gitattributes 中的标记来做到这一点。但是,如果可能的话,我仍然希望能够读取 gitk 中的差异。
有没有一种简单的方法可以做到这一点?
git - 无法签出 .gitattributes
我遇到了一个奇怪的问题,我无法从远程签出 .gitattributes。最近添加了 .gitattributes 文件,我想将其拉入并进行一些更改。我做到了git pull
,它说我的分支是最新的,但该文件没有出现在我的本地机器中(ls -al
没有显示 .gitattributes)。我试过了git checkout origin .gitattributes
,它说它不匹配任何文件。但如果我这样做git rm .gitattributes
,则git status
表明 .gitattributes 已上演以供删除。有谁知道如何解决这个问题?
编辑:
这是我的 .gitattributes
git - gitattributes:匹配两个名称几乎相同的文件,不同之处仅在于附加的固定字符串
背景
使用 smarty 模板时,您可以通过创建文件副本并添加字符串-USERMOD来覆盖文件,如下所示:
有没有办法在我的 .gitattributes 文件中定位这两个文件?
只针对第二种类型的文件很容易:
从字面上看,规则是这样的:
“如果有任何以 -USERMOD.original_extension 结尾的文件的副本,则忽略副本和原始文件”
当然,我总是可以手动添加这些文件,但是自动化的解决方案会很好。
gitignore(5) 的手册页(由 gitattributes(5) 引用以解释模式匹配)说:
否则,Git 将模式视为适合 fnmatch(3) 使用并带有 FNM_PATHNAME 标志的 shell glob
据我所知,shell glob 不能满足我的需要。然而,最终目标是告诉 git 导出忽略 USERMOD 文件及其原件,因此任何解决此问题的解决方案都将被接受。
git - 如何让 git 除了特定文件类型之外不进行任何行结束转换
我希望 git 除了特定文件(比如.c
和.h
)之外不要进行任何行尾转换。我想完成它,.gitattributes
这样我就可以覆盖用户机器上的任何环境。这主要针对 Windows 客户端。
我想要这样的东西:
但是 git 只是忽略了第一行之后的所有内容(它根本不执行任何行结束操作)。
有没有办法做到这一点?
git - gitattributes - 如何识别没有扩展名的 bash 脚本文件
我刚刚开始使用 git。我一直在使用https://github.com/Danimoth/gitattributes中的示例为我的各种项目(主要是 bash 和 python 脚本)组合一个 gitattributes 文件。我的问题是我的大多数 bash 脚本都没有文件扩展名。有没有我可以用来明确选择这些的模式(例如过滤器)?或者使用 .sh 扩展名重命名它们会更容易吗?
ruby-on-rails - 如何使服务器在收到未加密的推送后自动推送到加密的 Git 存储库
我们公司有一个基于 Rails 的软件的 SVN 存储库。
我们还有一个手动更新的加密存储库——拉取未加密,使用 RubyEncoder 编码,推送到加密。
我们大部分时间都过渡到了 Git,并且想让这个过程自动化,我想让这个过程自动化,并且每次提交。
所以
- 服务器收到推送到未加密的任何分支
- 服务器过滤器更改了 .rb 文件,通过 Rubyencoder 传递它们
- 加密的 .rb 文件和其他文件被推送到加密存储库,保留提交消息,因此提交比率为 1:1
- 分支创建和删除也被镜像。
与 git-encrypt 之类的解决方案不同,我们将其解释为不安全的是客户的通勤者,而不是代码存储库。
我的第一次尝试是一个很长的 post-receive 钩子,它很慢并且分支不能正常工作,所以我放弃了它。
我的第二次尝试是设置*.rb = rubyencode
和设置clean
和smudge
过滤器。虽然可以将 RubyEncoder 设置为在 /dev/stdin 上输入并在 /dev/stdout 上输出,但似乎这些会影响磁盘上的文件而不影响 git 历史记录,每次收到推送都需要再次提交。
如果 clean/smudge 按预期工作,服务器本地的拉取和推送(git remote origin add git@git.work.com:product/work_unencrypted.git
并git remote set-url origin --push git@git.work.com:product/work_encrypted.git
让它从预期的存储库中推送和拉取)将由 post-recieve 钩子触发。
我已经迷失了,我什至不知道此时要问的正确问题。也许这是如何逐步完成和修改提交以保持 1:1 的历史?
git - 如何为所有子文件夹设置以 git 属性结尾的行
我的 git 存储库包含一些 Windows 和 Linux 文件。例如,
Windows 和 Linux 文件夹都包含许多子文件夹和许多不同类型的扩展(例如源代码、文本文件、tarball、二进制文件等)
如何设置 gitattribute 以便在我签出存储库时,Windows 文件夹中的所有文件都将设置为 eol=crlf,而 Linux 文件夹将设置为 eol=lf?
此外,如何在不将更改推送到远程存储库的情况下测试更改?
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
希望我说清楚了。
git - 结帐时忽略 .gitattributes
JGit 不支持.gitattributes
. 关于该主题有一个5 岁的错误。
因此, JGit(扩展)ident
不使用宏。$Id
如果您使用git
支持.gitattributes
andident
的常规控制台检出分支,则会发生宏扩展。如果你这样做git blame
,它不会看到与$Id$
宏的行有差异。这是预期的。
如果你然后jgit blame
在同一个 repo 上做,你会得到Not Committed Yet
包含$Id$
宏的行。
我在调查 Sonarqube 的 Git 插件问题时发现了这一点。那里友好的人打开了一个错误来跟进。
我的问题:我如何告诉常规在结帐git
时忽略?.gitattributes
额外加分:我需要在 Jenkins 中执行此操作,因此最好开箱即用,对 Jenkins Git 插件进行一些操作。
老实说:我对一个肯定的答案没有寄予厚望。最好的事情是 JGit 齐心协力并支持.gitattributes
. 但这不是发牢骚的地方。
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
应返回空更改。
作为参考,这是污迹:
这是差异: