有没有办法告诉Git忽略文件中特定的行?

4
我正在尝试将我的.bashrc、.gitconfig和其他有用的配置放到GitHub上(因为我想分享一些有价值的代码),但问题是我不想分享关于我的某些“有价值的信息”,
所以有没有办法告诉Git忽略文件中某些模式或行(例如在.gitignore中)?
注意:我已经知道如何分享我的bashrc(我会把公共部分保留在bashrc中,把私人部分移到我不想分享的bashprofile中),但我想分享我的gitconfig(其中有一些很好的别名)。
谢谢。

1
可能是Can git ignore a specific line?的重复问题。 - Anil
3个回答

8

我认为可以使用 gitattributessmudgeclean 过滤器做类似的事情,但这可能会很混乱,而且可能相当脆弱。我的方法是将不想公开的内容放在非共享的 ~/.bashrc.local 文件中,并从共享的 .bashrc 文件中引用该文件,例如:

if [ -r ~/.bashrc.local ]; then
    . ~/.bashrc.local
fi

这还使我能够维护特定于系统/机器的配置,而不会破坏我的全局.bashrc


这是我也使用的设置。然后,您可以将它们存储在本地(或某个私有 git 存储库中),以便在其他地方进行复制。 - jvc26
不错的解决方案,但是像.gitconfig这样的文件怎么办?我在里面有很多别名,我搜索了一下类似“.gitaliases”的东西,但好像git并不支持这样的功能。 - equivalent8
基本上,我只想从.gitconfig将我的[alias]部分推送到GitHub,并保持我的私人信息隐藏在[user]部分内。所以我能否以某种方式拆分它?...但是希望将这些设置保留在.gitignore全局中,唯一的解决方案是在本地存储库中使用不同的设置。 - equivalent8
1
似乎.gitconfig不支持从外部源包含。也许这个相关的问题可以给你一些想法。其中一个答案提到在smudge/clean过滤器中使用gpg,但如果你不需要那个,你可以想出一些sed/cat过滤器来提取/连接整个部分,这应该不太困难。 - jw013
jw013,你最后的链接非常有用,因为它帮了我很多忙。因此我点击了“已回答”。 - equivalent8

2

为了正确结束这个问题:

这里和评论中提供的解决方案对于我的问题(分割.bashrc)有效,但对于原始问题:

有没有办法告诉git忽略文件中的某些行?

没有简单的方法。


这绝对不是正确的关闭问题方式:答案被接受,但它绕过了主要答案。这使得在没有外包的情况下提出/找到原始问题的答案更加困难。 - Alois Mahdal
我建议修改这个问题,使其成为一个特定于.bashrc或.bashrc类似文件的问题。这将使它成为一个完美的问答对,而不会让那些需要找到真正的“行级”解决方案的人感到困惑。 - Alois Mahdal
另外,我会单独提出原始问题(提到此事是为了避免混淆和重复回答)。它可能会无法得到回答,这是可以接受的(顺便说一下,永远不要说永远,也许Git 2.0会支持它)。 - Alois Mahdal
实际上,有一种方法,就像jw013所说的那样:https://dev59.com/d2Qo5IYBdhLWcg3wMs-2 - Kache

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接