我的公司最近开始使用Git进行源版本控制,由于编码人员的无能 - 这是我和我的老板:-P - 我们有一个非常好的意大利面文件被覆盖在这里和那里。
有没有办法将某些文件标记为“不可触及”,因此如果从另一个文件更新分支时,请勿覆盖文件或根本不进行更新?
提前谢谢。
答案 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开关,以便不删除本地文件。
当然,您必须手动将文件添加到未来的分支机构,这可能不是一个好主意。