使用Git防止文件覆盖

时间:2008-11-26 17:48:46

标签: git version-control

我的公司最近开始使用Git进行源版本控制,由于编码人员的无能 - 这是我和我的老板:-P - 我们有一个非常好的意大利面文件被覆盖在这里和那里。
有没有办法将某些文件标记为“不可触及”,因此如果从另一个文件更新分支时,请勿覆盖文件或根本不进行更新? 提前谢谢。

5 个答案:

答案 0 :(得分:3)

您可以添加名为.gitignore的文件。 git将忽略与该文件中的正则表达式匹配的任何文件名。

所以,我通常从以下内容开始:

*.log
*~
conf/*

修改品味。

答案 1 :(得分:3)

你可以用挂钩完成你所要求的,但我不知道这是否能解决你真正的问题。

如果它像正在进行的文件一样简单,那就很简单:永远不要使用未提交的更改来拉/合并/ rebase。在引入任何其他代码之前始终提交。

答案 2 :(得分:1)

通常,当使用checkout从分支移动到分支时,Git会尝试避免覆盖已更改的文件。也就是说,如果文件尚未更改且Git需要更改它,则文件将更改(之前的文件内容仍然存在于上一个分支中)。如果文件已被更改且Git 需要更改它,则将保留文件内容。如果文件已被更改且Git想要更改它,则会通知您本地更改与分支更改冲突,Git将拒绝切换分支。

为了理解您的文件被意外覆盖的原因,我们可能需要有关您所做文件的更多信息。

答案 3 :(得分:1)

要让Git丢弃信息需要非常具体的操作,即使这样也不会覆盖信息。所以情况可能不是你想象的那样。

将Git repo视为源代码的事务数据库。根据您的操作系统和设置,它可能是一个隐藏的数据库,因此您看到的只是工作目录。

事情是: Git在本地文件系统中使用该工作目录作为数据库上的浏览器。 “视图”可以更改,所有事务(提交)的记录仍然在回购中,未更改。

因此,您看到的工作目录将根据您调用的“视图”(结帐,通常是分支)进行更改。即使是在文本编辑器中打开的文件副本也可能会发生变化,这在我第一次注意到它的时候确实让我感到不适。

可以扔掉以前的工作,例如:
1. git reset HEAD~2扔掉你的最后两次提交或
2. checkout -f在更改为其他分支(“视图”)之前,会丢弃工作目录中的未经更改的更改(如果它们未被git add编辑,则无法恢复) 但是,如果没有至少收到警告消息,您不能无意中覆盖信息。在大多数情况下,信息仍然在回购中,直到它被垃圾收集,通常超过30天。

正如格雷格所说,我们需要更多信息才能确定。

答案 4 :(得分:0)

听起来你想要的是阻止git跟踪'不可触摸的'文件。这是通过使用git rm command

完成的
git rm <file>

如果这是您想要的,请使用--dry-run开关预览将要发生的事情。如果您确定要删除文件,则可能需要使用--cached开关,以便不删除本地文件。

当然,您必须手动将文件添加到未来的分支机构,这可能不是一个好主意。