如果我不想跟踪.html文件,我可以将模式添加到.gitignore,它们将被忽略。我想知道如何进行反向 - 在结账时,我怎么能让git只检查某些类型的文件或不检查某些类型的文件?
例如,如果我不想要html文件,我可以写:
git checkout HEAD . --no .html
如果存在的话:)是否有内置的方式,或者我只需要在结账后运行其他东西?
非常感谢任何帮助。
答案 0 :(得分:16)
如果要打包文件以进行部署,您可能不需要 - 或者想要 - repo本身。这正是git archive
的用途。联机帮助页中的几个示例(链接):
git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)
创建一个tar存档,其中包含当前分支上最新提交的内容,并将其解压缩到/ var / tmp / junk目录中。
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip > git-1.4.0.tar.gz
为v1.4.0版本创建压缩的tarball。
在export-ignore
属性的帮助下,您应该能够完全按照自己的意愿行事:
export-ignore
具有export-ignore属性的文件和目录不会添加到存档文件中。有关详细信息,请参阅gitattributes(5)。
例如,要排除目录private
以及文件mine.txt
和secret.c
,您可以放入文件.gitattributes
:
private/ export-ignore
secret.c export-ignore
就像gitignore文件一样,您可以将它们放在存储库中的任何位置,并且它们将在该目录中运行,但从顶层开始是一个不错的选择。
答案 1 :(得分:8)
如果您只想检查存储库的一部分,可以使用git的sparse-checkout选项,该选项具有强大的包含/排除规则。
以下StackOverflow问题有一些有用的说明:
的 GIT checkout except one folder 强>
但作为总结:
启用sparseCheckout
选项:
git config core.sparseCheckout true
创建名为.git/info/sparse-checkout
的文件,其中包含:
/*
!node_modules
实际上意味着在将存储库签出到工作目录时包括除node_modules
目录之外的所有内容。
答案 2 :(得分:2)
如果您只想进行一次更改(或不一致),或者只是不想将文件放入.gitignore
,请执行以下操作:
checkout
中排除的特定文件git stash push -m "files_to_ignore" my/path/of/the/file/file.txt
git checkout .
git stash apply stash^{/files_to_ignore}
使用git别名的完整解决方案如下所示:
alias reset-non-dev='git stash push -m "ignore_files" MyRepo/file1.txt MyRepo/dir/file2.js MyRepo/dir/dir2/file3.cs PSOne/Startup/PSOne/Views/Login.xaml.cs ; git checkout . ; git stash apply stash^{/ignore_files} ;'
稍后,您只需将其名称放在git bash中并按Enter键即可使用该别名。
我观察到的一个好处是,通过这种方法,您可以更改文件或在真正需要时跳过它们,而不必将此类文件标记为始终被忽略。
答案 3 :(得分:1)
所以我想将没有测试文件的代码发送到生产服务器。
对我来说最简单的方法就是在解压缩档案后,用rsync --exclude 'tests'
删除所有测试文件。
答案 4 :(得分:-2)
您无法在Git中检索单个提交的一部分。你要么提交,要么不做 - 没有中途步骤。
这意味着如果有一个提交添加了一堆文件,那么你可以获取所有这些文件(通过将该提交提取到本地存储库中)或者不提取任何文件(通过不提取该提交)。
你可以选择你想要的git cherry-pick
提交,但我怀疑在这种情况下它不会对你有所帮助。
通常一个文件应该在版本控制之下 - 我想不出有时你只想在Git中使用文件的原因。如果你的.gitignore中有东西,那么它可能是完全从存储库中删除的一个很好的候选者。 .gitignore基本上意味着“不要看这个文件,它不受版本控制”。
(如果你不介意重写你的存储库历史记录,你可以选择添加提交,然后做一个git reset --mixed HEAD^1
并创建新的提交,遗漏你不想要的文件......但是不要除非你真的知道你在做什么,否则不要这样做。最好删除文件并推送一个记录删除的新提交。)
编辑:刚刚看到您关于想要部署的特定部分的评论。在这种情况下,我建议您创建一个删除无关文件的部署分支。你可以随时在主线上重新定义这个分支,每次都应该为你神奇地删除文件。