如何解决如何在.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
中的模式,因此我认为无论本地.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 举报,一经查实,本站将立刻删除。