微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在.gitignore中将目录列入白名单,并在〜/ .gitignore中将其中的文件列入黑名单? 编辑:根据prosoitos' answer,此部分错误在此问题结尾处查看我的编辑,因为尚未完全回答编辑 在对问题进行编辑后进行编辑:

如何解决如何在.gitignore中将目录列入白名单,并在〜/ .gitignore中将其中的文件列入黑名单? 编辑:根据prosoitos' answer,此部分错误在此问题结尾处查看我的编辑,因为尚未完全回答编辑 在对问题进行编辑后进行编辑:

关于此主题的问题很多,但没有一个涉及~/.gitignore


我有一个奇怪的项目,它的顶层项目目录称为project/,里面充满了垃圾,但至少有一个重要的子目录,例如project/Feedme/。我想.gitignore project/中的所有内容,但取消.gitignore project/Feedme/及其内容。使用否定模式很容易:

project$ cat .gitignore
/*
!/Feedme/

我有一个文件project/Feedme/.exrc,我想忽略它。作为vi用户,我经常将.exrc文件用于本地编辑器设置,因此我在~/.gitconfig(由core.excludesFile Git设置指定)中有一个条目: / p>

project$ cat ~/.gitignore
.exrc

不幸的是,git似乎不想忽略.exrc

project$ git status -s
?? Feedme/
project$ git add Feedme/
project$ git status -s
A  Feedme/.exrc

为什么Git不会忽略project/Feedme/.exrc


编辑:根据prosoitos' answer,此部分错误。在此问题结尾处查看我的编辑,因为尚未完全回答。

为什么我认为这应该起作用?手册页 gitignore (5)如此表示:

gitignore 文件中的每一行都指定一个模式。决定时 是否忽略路径,Git通常会检查 gitignore 模式 多个来源(从高到低依次排列) 最低(在一个优先级内,最后一个匹配模式 决定结果):

  • […]

  • 从与计算机目录相同目录中的 .gitignore 文件读取的
  • 模式 路径,或在任何父目录中,具有较高级别的模式 文件(直到工作树的顶层)被覆盖 较低级别文件中的文件,直到包含
    的目录 文件。 […]

  • […]

  • 从配置变量指定的文件中读取的模式 core.excludesFile

由于最后读取了~/.gitignore中的模式,因此我认为无论本地.exrc为何,.gitgnore最终都会被忽略。

一个可能的解释是(再次从 gitignore (5)手册页,着重强调)

是 如果文件的父目录不能重新包含 文件被排除

也以其双重形式(在手册页中不是)应用

是 如果文件的父目录不能排除 文件重新包含

如果是这种情况,我会认为这是一个错误;至少应在文档中明确说明。


P.S .:我的~/.gitignore在正常情况下可以正常工作,因此问题不存在。


编辑

Prosoitos是正确的,首先读取全局~/.gitignore ,因此在{em>之后{em> project/Feedme/重新包含.exrc子目录全局忽略。但是我仍然面临另一个奇怪的问题。

据我所知,现在将.exrc放在我的~/.gitignore的最后一行等效(如果project/.git/info/excludes为空)等同于将.exrc放在第一行project/.gitignore中的。但是,如果我这样做,这次project/Feedme/.exrc将被忽略!

project$ cat ~/.gitignore
project$ cat .gitignore
.exrc
/*
!/Feedme/
project$ git ls-files --other --ignored --exclude-standard
.gitignore
Feedme/.exrc

这是怎么回事?

解决方法

由于〜/ .gitignore的模式是最后读取的[...]

不。这是您弄错了的地方。您引用的Git手册部分:

Git通常会检查多个来源的gitignore模式,并具有以下优先顺序,从最高到最低 [...]

意味着全局.gitignore被本地变量覆盖,而不是相反。

因此,本地!/feedme/中的.gitignore会覆盖全局.exrc中的feedme/.exrc。因此,不会排除.exrc

一种简单的解决方案是将.gitignore添加到本地!/feedme/文件中,并确保其位于git check-ignore -v feedme/.exrc 行下方,因为:

(在一个优先级内,最后一个匹配模式决定结果)


注意:

诚然,“优先顺序”一词可能令人困惑。

在这里,“更高的优先级”表示它比“更重要”(因此优先)。

您似乎已经从运算符优先级的意义上理解了它,其中“较高优先级”表示“先执行”,这将导致相反的结果。因此造成混乱。


在对问题进行编辑后进行编辑:

现在您已对情况进行了更正,我认为您是正确的。

我转载了您的情况,然后运行:

.gitignore:1:.exrc  feedme/.exrc

我得到:

.exrc

表明!/feedme/并未排除对 <asp:Label ID="Label5" Text='transfer text here' runat ="server" /> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="user_name" DataSourceID="SqlDataSource1" Height="100px" Width="383px"> <Columns> <asp:CommandField HeaderText="select" SelectText="select " ShowSelectButton="True"> </asp:CommandField> <asp:BoundField DataField="user_name" HeaderText="user_name" ReadOnly="True" SortExpression="user_name" /> <asp:BoundField DataField="user_full_name_ar" HeaderText="user_full_name_ar" SortExpression="user_full_name_ar" /> <asp:TemplateField HeaderText="user_full_name_ar" SortExpression="user_full_name_ar"> <ItemTemplate> <asp:Label ID="Label4" Text='<%# Session["lang"].ToString() == "en"? Eval("user_full_name_en") : Eval("user_full_name_ar") %>' runat ="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <asp:Button ID="ButtonSearch" runat="server" text="select" OnClientClick ="txt();" CommandArgument ='<%# Bind("user_name") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> 的排除。

我尝试用Google搜索它,但也找不到任何文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。