Git-为什么我的源文件被忽略?

时间:2018-08-02 07:41:04

标签: git gitignore

我正在使用git版本2.15.0.windows.1

我的gitignore文件中包含以下内容:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MyNamespace;assembly=MyAssembly"
             x:Class="MyNamespace.PickingPartItemTemplate">

    <StackLayout Spacing="0"
                 Padding="0"
                 HorizontalOptions="Fill">

        <StackLayout Spacing="5"
                     Padding="0,0,0,0"
                     HorizontalOptions="FillAndExpand"
                     VerticalOptions="FillAndExpand"
                     Orientation="Horizontal">

            <!-- References -->
            <StackLayout HorizontalOptions="StartAndExpand"
                         VerticalOptions="Center"
                         Margin="2,0,2,0">

                <Label TextColor="{DynamicResource BaseTextColor}">
                    <Label.FormattedText>
                        <FormattedString>
                            <Span Text="{Binding Reference}"
                                  FontAttributes="Bold"
                                  ForegroundColor="{DynamicResource DarkTextColor}" />
                            <Span Text=" " />
                            <Span Text="{Binding Description}" />
                        </FormattedString>
                    </Label.FormattedText>
                </Label>
                <Label Text="{Binding Comment}"
                       FontAttributes="Italic"
                       FontSize="14"
                       Opacity=".5"
                       TextColor="{DynamicResource BaseTextColor}" />
            </StackLayout>

            <!-- Quantities -->
            <StackLayout VerticalOptions="Center"
                         HorizontalOptions="EndAndExpand"
                         Margin="2,0,2,0"
                         WidthRequest="80">

                <Label TextColor="{DynamicResource BaseTextColor}"
                       FontSize="14"
                       HorizontalTextAlignment="End">
                    <Label.FormattedText>
                        <FormattedString>
                            <Span Text="{Binding Qty}"
                                  FontAttributes="Bold"
                                  ForegroundColor="{DynamicResource DarkTextColor}" />
                            <Span Text=" " />
                            <Span Text="{Binding UnitCode}"
                                  FontSize="10" />
                        </FormattedString>
                    </Label.FormattedText>
                </Label>

                <Label TextColor="{Binding StatusColor}"
                       FontSize="14"
                       HorizontalTextAlignment="End">
                    <Label.FormattedText>
                        <FormattedString>
                            <Span Text="{x:Static local:FontAwesome.ShoppingCart}"
                                  FontFamily="FontAwesome" />
                            <Span Text="  " />
                            <Span Text="{Binding PrepareQty}"
                                  FontAttributes="Bold" />
                        </FormattedString>
                    </Label.FormattedText>
                </Label>
            </StackLayout>

        </StackLayout>

        <!-- Bottom Line -->
        <BoxView BackgroundColor="{Binding StatusColor}"
                 HeightRequest="2"
                 VerticalOptions="End" />

    </StackLayout>  
</ContentView>

我的理解是第三行告诉git跟踪与以* .btt结尾的模式匹配的文件。由于前面的

,这是不要忽略

我的问题是,我的文件 eformsV2.btt 被忽略了。 我使用了 git check-ignore 命令,它返回的模式如下所示:

enter image description here

文档(git doc)建议“ check-ignore”仅显示它认为被忽略的文件的路径-正确,但是为什么模式的前缀是不会导致文件被跟踪?

1 个答案:

答案 0 :(得分:1)

我的问题是文件是否实际上被忽略了。 (即使是“不要忽略”的规则,Git的check-ignore也会告诉您哪个规则与文件匹配)。

我创建了一个测试目录,并将您的示例.gitignore文件复制到其中,然后 制成了两个子目录:

$ mkdir eforms eforms/eformsV2.Bam
$ cd eforms/eformsV2.Bam/
$ touch ignoreme
$ touch eformsV2.btt
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        ../
$ git status -uall
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        eformsV2.btt

nothing added to commit but untracked files present (use "git add" to track)
git check-ignore -v eformsV2.btt 
.gitignore:3:!**/*[Bb][Aa][Mm]/*.btt    eformsV2.btt

除了我跑过git status两次并显示(带有第二个更详细的-uall变体)eformsV2.btt不是不是的事实,这似乎与您的屏幕截图匹配。


在没有git status -uall的{​​{1}}仅显示目录的情况下运行git status很有用,因为此时您所知道的是:该目录中的某些文件不在索引中,但它们都不会被忽略。从更高的角度来看更有意义:

-uall

由于本身没有可跟踪的文件 $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) eforms/ nothing added to commit but untracked files present (use "git add" to track) -即使这些文件位于eforms/子目录中,也是如此— Git已将所有此类文件的缩写简称为eforms,而不是eforms/。但是eforms/eformsV2.Bam/会指向您告诉您为什么不忽略文件 的行。


还请注意,git check-ignore -v中是否存在路径名不会影响是否实际跟踪了文件。这由文件是否现在位于索引中 严格控制。如果路径名存储在索引中,则跟踪该文件;否则,将跟踪该文件。如果路径名不在索引中,则文件不会被跟踪。 .gitignore条目主要告诉Git是否应该对未跟踪的文件进行投诉。 (在某些情况下,它也会允许Git破坏文件。)