我的文件结构类似于以下文件:
foo/bar.foo
node_modules/foo/bar.json
node_modules/foo/bar/foo.bar
我想做的是忽略node_modules
文件夹中json
文件夹内的所有文件,以便在存储库中得到以下文件结构:
foo/bar.foo
node_modules/foo/bar.json
我试图找到一种简单的方法来做到这一点,但我还没有到位。
这是我在.gitignore
中想到的:
# ignore everything inside node_modules
node_modules/*
# But descend into directories
!node_modules/**/*.json
达到预期结果的最优雅的方法是什么?
P.S。我不知道我在做什么。
答案 0 :(得分:3)
在gitignore文档中,他们指出:
如果排除了该文件的父目录,则无法重新添加该文件。
这为您的规则失败的原因提供了直觉。您可以使用一些xargs魔术来手动添加缺少的json文件。每当添加新软件包时,您都必须运行此程序,但是一旦它们被跟踪,一切都会起作用。
find node_modules/* -name *.json -print |xargs git add -f
我使用Git 2.18.0
进行了测试,并确认以这种方式添加后,被忽略目录中的文件可以正常工作。对于您的-f
规则所排除的更深层路径,必须使用以上.gitignore
参数。
答案 1 :(得分:1)
您必须首先不忽略(排除)被忽略目录的子文件夹。
library(shiny)
ui <- fluidPage(
# uiOutput("slidertest"),
sliderInput("slider","Update Ends?", min = 0, max=100,value=c(0,100) ),
verbatimTextOutput("values")
)
server <- function(input, output, session) {
sliderends <- reactiveValues(start=0,end=100)
observeEvent(input$slider,{
if(input$slider[1]!=sliderends$start){
#start value change
sliderends$start<-input$slider[1]
updateSliderInput( session,"slider","Update Ends?", min = 0, max=100,value=c( input$slider[1] , 100-input$slider[1] ) )
}else if(input$slider[2]!=sliderends$end){
#end value chagne
sliderends$end<-input$slider[2]
updateSliderInput( session,"slider","Update Ends?", min = 0, max=100,value=c( 100-input$slider[2] , input$slider[2] ) )
}
})
output$values <- renderText({paste(input$slider[1], input$slider[2], sliderends$start, sliderends$end, sep=";")})
}
shinyApp(ui, server)
请使用# ignore everything inside node_modules
node_modules/**
# exclude or whitelist subfolders: note the trailing /
!node_modules/**/
# But descend into directories
!node_modules/**/*.json
检查哪个规则仍然会忽略您的文件。
并确保未将这些文件添加到索引(git check-ignore -v -- afile
)
答案 2 :(得分:0)
好,所以我终于找到了解决方案。这就是窍门:
# Ignore all the files inside the node_modules folder
node_modules/**/*.*
# Allow only json files inside the node_modules folder
!node_modules/**/*.json
问题是通过执行node_modules/*
,它不仅会忽略文件,还会忽略文件夹。
正如git doc所说:
如果文件的父目录不能重新包含该文件 文件被排除。
因此,我改为node_modules/**/*.*
,它只排除文件而不是文件夹。
这样,!node_modules/**/*.json
实际上能够将json
文件列入白名单。