我对这个git事情很新。我正在使用它(是的)在我的本地电脑和远程网络服务器之间维护我自己的网站文件。
有些文件,例如设置和.htaccess文件,我希望在服务器上推送后保持独立。现在......其中一些我提前考虑并在开始时放入.gitignore文件,它们很好。但是自从我发现以后的其他人......我现在将它们添加到.gitignore中,并且它们仍然会受到挤压!当然,他们在当地被忽略了。我认为正在发生的事情是文件没有被转移到删除仓库,但是已经在远程仓库中的副本正在将post_received处理到目的地并且 poof 。
所以我尝试了“删除”,但是一旦推动,它也从最终目的地删除了文件!根本不是我想要的!
那么我怎样才能得到它a)忽略目标端的文件,b)从远程仓库中删除它,c)仍然没有触及本地副本?
答案 0 :(得分:0)
Gitignore是正确的方法。如果您现在只是在目标计算机上再次恢复/生成文件,那么您应该没问题。删除make git删除文件。
答案 1 :(得分:0)
.gitignore应该忽略其中指定的所有文件。但是,您可能还需要在目标端维护.gitignore。
如果要从存储库中删除该文件但仍使用本地副本git rm --cached "filename"
。这将从repo中删除文件,而不会在本地系统上保持文件不变。
答案 2 :(得分:0)
我可以想到两种方法来做到这一点。
首先,它是从结帐"过渡到"到"不在结账时#34; git将其解释为从结帐中删除(以及签出的工作树) - 足够合理,但是当您在此处使用它进行部署时,它并不总是您想要的。无论如何 - 结账后删除它,git不再跟踪它,你可以把它放回去。这将一直有效,直到您检查出仍然存在它的旧分支,
其次,你可以让它跟踪但是放一个repo-local覆盖,告诉git不要在工作树或repo中覆盖它。 Git有"过滤器"您可以使用它来清理进出回购物的方式内容,并且很容易将其提供给那些已经存在的内容:
git config filter.pin-content.smudge 'cat %f 2>&- || cat'
git config filter.pin-content.clean 'git show :%f 2>&- || cat'
echo path/to/file filter=pin-content >>.git/info/attributes
"涂抹"方向是弄脏工作用的内容,"清洁"是为了在您的回购中制作原始柏拉图式的理想内容。
对于这两种方式,从结账时到非结账的转换将被解释为删除。
有一种非常光荣的方式可以解决这个问题,让git read-tree
更新索引,然后进行自己的后处理以保留您想要的工作树内容,但是如果其他人将要使用或维护这是值得考虑的,如何不受欢迎的人强迫人们学习内脏。阅读树的文档特别(并且不必要地)令人生畏,因此它是一个真正的问题。