繁体   English   中英

如何选择不将某些文件/文件夹从Git存储库中拉到本地副本

[英]How can I choose not to pull certain files/folders FROM a Git repository TO my local copy

我在Jekyll上使用Github页面,并且在使用插件生成搜索索引。 该插件无法在Github上运行,但对于使用Mac的我们这些本地实例,它确实可以在Linux服务器上的日常cron作业中运行。 我的问题是,许多贡献者都使用Windows,并且该插件无法在Windows上运行,也不允许Jekyll启动。 因此,我想做的是防止Windows用户提取_plugins文件夹,Gemfile,_config.yml以及其他几个文件和文件夹,同时仍将所有这些内容同步到Mac和Linux机器,以及继续使用Github作为所有主存储库,包括插件。

我已经尝试过.gitignore(使用整个git update-index --assume-unchanged的东西,然后在本地更改文件/文件夹),但是这只能防止在任何人更改的情况下将本地更改推送到主存储库不需要的文件之一,将在下一次提取时检索它们。

关于如何解决这个问题有什么想法吗?

如果你只有锤子...

如果您至少拥有Git 1.7,则可以使用Sparse checkout 这是更多信息

确实,使用Git修复损坏的代码听起来是个坏主意。 也许有人会提供更有用的建议。

没有内置的功能(可能应该有,这是解决不区分大小写和区分大小写的主机文件系统问题的一种方法)。

在底层,您通常根本不希望这样做。 原因是git没有按文件存储文件。 相反,它按content存储数据。 它会将所有数据(无论是某些实际文件内容(git称为“ blob”),“ commit”还是其他两个内部数据结构中的任何一个)转换为唯一的SHA-1值。

这里感兴趣的部分是其他两个数据结构之一,即“树”。 (最后一个是“带注释的标签”,有时甚至是“标签”,但普通的“标签”可以与存储库对象数据库外部的轻量级标签混淆。)这是为中每个blob提供名称的一次提交。

您可以在Git Book的9.2节中查看将文件,树和提交输入git存储库的过程。

git在这里需要但不是必须的,是一种简单方便的方法来修改 “存储库内树对象中的名称”和“保存工作目录的主机上文件系统中的名称”之间的映射。 可以双向进行。 上面的Git Book链接显示了如何“在途中”(获取本地文件并为它们提供与磁盘上名称不同的树名)。 —to do it "on the way out". 这是痛苦小,但仍然没有痛苦 -to做“的出路”。 特别是,您可以设置git所谓的“稀疏签出”模式,以避免签出大多数东西。 那么您可以使用git show提取不同名称的单个文件:

git show HEAD:path/to/foo > different-name

如有必要。

如果可以通过某种方式设置映射,则可以执行以下操作:

cp mappings/windows-map > .git/info/filemap # NOTE: I MADE THIS UP

(例如,在mappings/windows-map应该将回购名称_config.yml转换为工作文件名, not-for-use-on-windows/_config.yml )。 甚至可以让您编辑文件并提交它,从而反转映射。 但是没有,所以你不能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM