忽略Git存储库及其克隆中的版本化文件

时间:2013-10-15 15:26:59

标签: git repository clone gitignore ignore

出于某种原因,我想在我的存储库中有一个空文件。该文件需要存在,但构建过程会更改它,我不希望提交这些更改。我需要克隆我的存储库的用户也忽略对此文件的更改。

git update-index --assume-unchanged似乎很好,但它只能在本地使用。

你知道我怎么解决这个问题吗?

4 个答案:

答案 0 :(得分:4)

设置repo以保存文件的特定已提交状态很容易,并且您可以拒绝任何您不喜欢的入站。

保留文件的特定已提交状态:

# do this once when the committed path/to/file is in the state you want
x=`git rev-parse master:path/to/file`
echo path/to/file filter=wired-to-$x >>.gitattributes

# then in each repo that wants it
git config filter.wired-to-$x.clean "git show $x"

预接收挂钩测试入站推送,这个简单的

#!/bin/sh
set -e
while read old new ref; do
        git ls-tree $new path/to/file \
        | awk '$3 != "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" {
                print "path/to/file is not empty"; exit 1; }'
done

将拒绝任何包含带有非空路径/ /文件的入站分支提示的推送。在你的“$ x”中检查你想要的状态,为了增加彻底性,你可以通过内部rev-list循环来运行ls-tree来运行所有的inbounds。

答案 1 :(得分:4)

mentioned的清洁过滤方式jthill是正确的方法。 1

git clean filter

每次将文件“添加”到索引时强制恢复文件(意味着它实际上从未添加过,因为它没有更改)。

问题:如何强制用户定义它?

解决方案:让他们克隆模板仓库,其已包含:

  • 那个空文件,
  • .gitattributes文件,其中声明了清洁过滤器

如果您将主要的集中式回购设置为拒绝不是快进版本(git config receive.denyNonFastForwards true)的参考更新,那么您的用户将无法做出选择,只能从具有相同共同历史记录的回购中推送比你的模板回购。
这意味着他们将拥有这些设置。

当然,他们可以在新提交中删除所述设置,但这是从jthill的答案中pre-receive挂钩开始的时候。
如果他们不需要知道这些文件,他们很可能不会搞乱已经为他们定义的内容。

答案 2 :(得分:1)

如果他们没有git add更改的文件,那么这不是问题。教他们不要使用git add .,它接近等价物Difference of “git add -A” and “git add .”

项目自述文件还可以包含您对相关文件的git update-index --assume-unchanged指令

答案 3 :(得分:1)

这似乎是一个应用程序的任务,而不是git的。我会将此文件添加到.gitignore,并确保构建过程或使用它的任何其他过程都可以创建它。