git -add不适用于通配符

时间:2013-02-12 14:19:29

标签: git posh-git

我正在尝试使用“生成”文本添加(编辑:删除操作)这些文件,但它不起作用。我正在使用PowerShell。

#       deleted:    Apica.WebPerformance.Web.Controllers/SharedController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/SidebarController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/SubscriptionController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/ToolsController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/UnauthorizedController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/UrlCheckController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/UrlCheckWizardController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/UserSessionContextController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/UserSessionContextDataController.generated.cs
#       modified:   Apica.WebPerformance.Web.Controllers/ViewModels/Checks/CheckListViewModel.cs
#       modified:   Apica.WebPerformance.Web.Controllers/ViewModels/Checks/ChecksOverviewViewModel.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/WebSocketCheckWizardController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/WebSocketJmsCheckWizardController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/WidgetsController.generated.cs
#       deleted:    Apica.WebPerformance.Web.Controllers/WizardController.generated.cs
#       modified:   Apica.WebPerformance.Web/Assets/Common/Css/jquery.multiSelect.css
#       modified:   Apica.WebPerformance.Web/Views/Examples/MultiSelect.cshtml
#
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> git add *generated.cs
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> git add '*generated.cs'
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> git add '*generated*'
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> git add \*generated.cs
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> git add '*generated.cs'
C:\git_apica\WebPerformance.Web [ViewModelRefactor +6 ~2 -0 | +0 ~6 -52]> 

这些命令实际上都没有任何东西。然而,它逐个文件地工作。

3 个答案:

答案 0 :(得分:2)

也许这就是好先生

find | grep generated.cs | xargs git add

答案 1 :(得分:2)

您的命令看起来有两个小问题

  1. 您想要暂存的文件看起来就像是shell所在的目录,因此您需要添加一个前导*
  2. 您想要暂存已删除的文件。有两种方法可以在每个已删除的文件中调用git rm <file name>或使用-u命令的add标志。 从文档(强调我的):

      

    -u
      --update
      仅匹配索引中已跟踪的文件而不是工作树。这意味着它永远不会暂存新文件,但是它会暂存已修改的跟踪文件的新内容,并且如果已删除工作树中的相应文件,它将从索引中删除文件。 / p>

  3. git add -u *\*.generated.cs应该有用。

答案 2 :(得分:0)

这里的问题是通配符只会扩展到文件系统上的文件名(因为shell正在进行扩展,而不是git)。由于您已删除文件系统中不存在的文件,因此您需要使用其他命令。添加删除操作有两种简单的方法。

git add -u

这会将所有修改(包括删除)添加到索引中。

git add full/path/to/deleted/file

将添加删除。

或者,如果您使用git rm删除文件,则会自动为您添加删除操作。

要获取已删除文件名的列表,此命令应该起作用:

git status --porcelain | awk '/^ D/ {print $2}'

然后你可以像Steven Penny建议的那样将结果传递给xargs