近期更新了一下自己的GitHub Pages博客, 但是发现上传到GitHub上面的文件中有很多奇奇怪怪的文件, 并且无关于博客的构建与生成. 之前倒是在阮一峰老师的技术周刊上面看到一篇文章1通过.gitignore文件去除MacOS下独有的索引文件.DS_Store文件, 但是感觉写的太简略了, 实在是没有到我心坎里, 下面根据另外几篇不错的文章23, 加上官方文档中的解释/示例4与自己的实践, 总结出本文, 校网能对同样热爱技术的大家有所帮助.
测试环境: MacOS
通常,在项目上使用Git的工作时,您会希望排除将特定文件或目录推送到远程仓库库中的情况。
.gitignore文件可以指定Git应该忽略的未跟踪文件。
例如jetbrains系列IDE项目生成的.idea目录, vscode生成的.vscode目录, 或者C项目编译的目标文件等, 这些文件都不是项目的源码, 并且没有这些内容会让源代码更加清爽, 这时候就要有一个.gitignore文件来大显身手了.
gitignore文件采用#作为注释符号, 空行用来分隔不同模式, 一行表示一个模式, 在GitHub中每次创建仓库会问项目是否需要gitignore以及语言类型, 不同语言类型对应不同的gitignore模板.
.gitignore文件是纯文本文件,其中每行包含一个模式,用于忽略文件或目录。.gitignore使用全局匹配模式来匹配带通配符的文件名。如果文件或目录包含在通配符,则可以使用单个反斜杠(\)来转义字。
斜杠符号(/)是目录的分隔符。斜杠开头模式相对于.gitignore所在的目录。如果模式以斜杠开头,则仅从仓库的根目录中开始匹配文件和目录。如果模式不是以斜杠开头,则它将匹配任何目录或子目录中的文件和目录。
如果模式以斜杠结尾,则仅匹配目录。当目录被忽略时,其所有文件和子目录也将被忽略。
最直接的模式是没有任何特殊字符的文件名。例如/access.log仅匹配access.log。而access.log将会匹配当前目录与子目录 access.log,logs/access.log ,var/logs/access.log。当以/斜杠符号结束时则匹配目录。例如build/匹配build目录。
*****星号符号匹配零个或多个字符。例如*.log模式将匹配error.log,logs/debug.log,build/logs/error.log等所有目录下以.log作为扩展名的文件。
**两个相邻的星号符号匹配任何文件或零个或多个目录。当后跟斜杠(/)时,它仅与目录匹配。例如,logs/将会匹配logs目录中所有文件与目录。/build将匹配所有目录中出现以build命名目录与文件var/build,pub/build。
模式foo/**/bar将匹配foo/bar,foo/a/bar,foo/a/b/c/bar。
?问号匹配单个任意字符。例如模式access?.log将会匹配access0.log,access1.log,accessA.log 。
**[…]**方括号匹配方括号中包含的字符。当两个字符之间用连字符-隔开时,表示一个字符范围。该范围包括这两个字符之间的所有字符。范围可以是字母或数字。如果[之后的第一个字符是感叹号(!),则该模式匹配除指定集合中的字符以外的任何字符。
例如模式*.[oa]将匹配文件file.o,file.a。模式*.[!oa]将匹配file.s,file.1但不匹配file.0与file.a。
以感叹号(!)开头的模式将否定先前模式。此规则的例外是,如果排除了其父目录,则重新包含文件。例如模式 *.log与!error.log这将会匹配所有以.log作为扩展名文件,但不匹配error.log。
可以创建一个全局的忽略文件, 用来设置所有本地项目提交时候的忽略规则.
例如,要将~/.gitignore_global设置为全局Git忽略文件,您可以执行以下操作。首先创建文件:
touch ~/.gitignore_global
将文件添加到Git配置:
git config --global core.excludesfile ~/.gitignore_global
这里我的全局规则为:
# ~/.gitignore_global
# Symlinked into ~/ as .gitignore
# Compiled source
*.dll
*.exe
# Packages/ Archives
*.7z
*.dmg
*.gz
*.iso
*.tar
*.zip
*.pkg
# Databases
*.sql
*.sqlite
# Logs
*.log
# project files
.idea/
.vscode/
# OS generated files
**/*.app
**/CmakeCache.txt
**/build/*
**/CmakeFiles/*
**/.DS_Store
.DS_Store
**/.Spotlight-V100
**/.Trashes
**/Thumbs.db
带有--ignored选项的git status命令显示所有被忽略文件的列表:
git status --ignored
在调试过程中比较常用, 可以看到被添加到gitignore忽略列表的文件.
您的工作副本中的文件可以被追踪,也可以不被追踪。要忽略先前提交的文件,需要取消暂存并从索引中删除该文件,然后在.gitignore中添加该文件模式.
--cached选项告诉git不要从工作树中删除文件,而只是从索引中删除它。要递归删除目录,请使用-r选项:
git rm --cached filename
如果要从索引和本地文件系统中删除文件,请忽略--cached选项。以递归方式删除文件时,使用-n选项将执行“空运行”(dry-run, 不运行, 只显示待删除的文件)并显示要删除的文件:
# 会删除本地路径
git rm -r directory
然后进行递归删除(并不会删除本地路径)
# 只会删除索引
git rm --cached -r directory
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只