解决Git pull出现non-fast-forward错误

当要push代码到git时,出现提示:

error:failed to push some refs to …

Dealing with “non-fast-forward” errors
From time to time you may encounter this error while pushing:

$ git push origin master
To ../remote/
! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to ‘../remote/’

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the ‘non-fast forward’
section of ‘git push –help’ for details.
This error can be a bit overwhelming at first, do not fear. Simply put, git cannot make the change on the remote without losing commits, so it refuses the push. Usually this is caused by another user pushing to the same branch. You can remedy this by fetching and merging the remote branch, or using pull to perform both at once.
In other cases this error is a result of destructive changes made locally by using commands like git commit –amend or git rebase. While you can override the remote by adding –force to the push command, you should only do so if you are absolutely certain this is what you want to do. Force-pushes can cause issues for other users that have fetched the remote branch, and is considered bad practice. When in doubt, don’t force-push.

 

问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:

1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2,先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

  1. $ git pull

可是,这时候又出现了如下的问题:

上面出现的 [branch “master”]是需要明确(.git/config)如下的内容
[branch “master”]
remote = origin

merge = refs/heads/master

这等于告诉git2件事:

1,当你处于master branch, 默认的remote就是origin。

2,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变

如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:

$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master

之后再重新git pull下。最后git push你的代码吧。it works now~

Git push错误及解决方法

在使用Git Push代码到数据仓库时,提示如下错误: [codesyntax lang=”text”]

[remote rejected] master -> master (branch is currently checked out)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git@192.168.1.X:/var/git.server/.../web
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push Test refs to 'git@192.168.1.X:/var/git.server/.../web'

[/codesyntax]

这是由于git默认拒绝了push操作,需要进行设置,修改.git/config添加如下代码:

[codesyntax lang=”text”]

[receive]
    denyCurrentBranch = ignore

[/codesyntax]

注意上面修改的是代码仓库的config,而不是本地分支的config

在初始化远程仓库时最好使用 git –bare init   而不要使用:git init

如果使用了git init初始化,则远程仓库的目录下,也包含work tree,当本地仓库向远程仓库push时,   如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,  也即在远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset –hard才能看到push后的内容.

Windows 常见错误

最近在编写Python代码的时候,可能会遇到一些意外的错误,IDE会显示错误代码。比如:WindowsError: [Error 2]。

但这些代码并没有直接说明是什么错误,为了避免每次都要上网搜索该问题,干脆直接把Windows常见的Error都给列出来,纯粹就是为了方便下次写代码时好处理这些数据了~~

0操作成功完成。
1功能错误。
2系统找不到指定的文件。
3系统找不到指定的路径。
4系统无法打开文件。
5拒绝访问。
6句柄无效。
7存储控制块被损坏。
8存储空间不足,无法处理此命令。
9存储控制块地址无效。
10环境错误。
11试图加载格式错误的程序。
12访问码无效。
13数据无效。
14存储器不足,无法完成此操作。
15系统找不到指定的驱动器。
16无法删除目录。
17系统无法将文件移到不同的驱动器。
18没有更多文件。
19介质受写入保护。
20系统找不到指定的设备。
21设备未就绪。
22设备不识别此命令。
23数据错误(循环冗余检查)。
24程序发出命令,但命令长度不正确。
25驱动器无法找出磁盘上特定区域或磁道的位置。
26无法访问指定的磁盘或软盘。
27驱动器找不到请求的扇区。
28打印机缺纸。
29系统无法写入指定的设备。
30系统无法从指定的设备上读取。
31连到系统上的设备没有发挥作用。
32进程无法访问文件,因为另一个程序正在使用此文件。
33进程无法访问文件,因为另一个程序已锁定文件的一部分。
36用来共享的打开文件过多。
38到达文件结尾。
39磁盘已满。
50不支持网络请求。
51远程计算机不可用。
52在网络上已有重复的名称。
53找不到网络路径。
54网络忙。
55指定的网络资源或设备不再可用。
56已到达网络BIOS命令限制。
57网络适配器硬件出错。
58指定的服务器无法运行请求的操作。
59发生意外的网络错误。
60远程适配器不兼容。
61打印机队列已满。
62无法在服务器上获得用于保存待打印文件的空间。
63删除等候打印的文件。
64指定的网络名不再可用。
65拒绝网络访问。
66网络资源类型错误。
67找不到网络名。
68超过本地计算机网卡的名称限制。
69超出网络BIOS会话限制。
70远程服务器已暂停,或正在启动过程中。
71当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
72已暂停指定的打印机或磁盘设备。
80文件存在。
82无法创建目录或文件。
83INT24失败。
84无法取得处理此请求的存储空间。
85本地设备名已在使用中。
86指定的网络密码错误。
87参数错误。
88网络上发生写入错误。
89系统无法在此时启动另一个进程。
100无法创建另一个系统信号灯。
101另一个进程拥有独占的信号灯。
102已设置信号灯且无法关闭。
103无法再设置信号灯。
104无法在中断时请求独占的信号灯。
105此信号灯的前一个所有权已结束。
107程序停止,因为替代的软盘未插入。
108磁盘在使用中,或被另一个进程锁定。
109管道已结束。
110系统无法打开指定的设备或文件。
111文件名太长。
112磁盘空间不足。
113无法再获得内部文件的标识。
114目标内部文件的标识不正确。
117应用程序制作的IOCTL调用错误。
118验证写入的切换参数值错误。
119系统不支持请求的命令。
120此功能只被此系统支持。
121信号灯超时时间已到。
122传递到系统调用的数据区太小。
123文件名、目录名或卷标语法不正确。
124系统调用级别错误。
125磁盘没有卷标。
126找不到指定的模块。
127找不到指定的程序。
128没有等候的子进程。
130试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。
131试图移动文件指针到文件开头之前。
132无法在指定的设备或文件上设置文件指针。
133包含先前加入驱动器的驱动器无法使用JOIN或SUBST命令。
134试图在已被合并的驱动器上使用JOIN或SUBST命令。
135试图在已被合并的驱动器上使用JOIN或SUBST命令。
136系统试图解除未合并驱动器的JOIN。
137系统试图解除未替代驱动器的SUBST。
138系统试图将驱动器合并到合并驱动器上的目录。
139系统试图将驱动器替代为替代驱动器上的目录。
140系统试图将驱动器合并到替代驱动器上的目录。
141系统试图替代驱动器为合并驱动器上的目录。
142系统无法在此时运行JOIN或SUBST。
143系统无法将驱动器合并到或替代为相同驱动器上的目录。
144目录并非根目录下的子目录。
145目录非空。
146指定的路径已在替代中使用。
147资源不足,无法处理此命令。
148指定的路径无法在此时使用。
149企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
150系统跟踪信息未在CONFIG.SYS文件中指定,或不允许跟踪。
151为DosMuxSemWait指定的信号灯事件个数错误。
152DosMuxSemWait不可运行。已设置过多的信号灯。
153DosMuxSemWait清单错误。
154输入的卷标超过目标文件系统的长度限制155无法创建另一个线程。
156接收进程已拒绝此信号。
157段已被放弃且无法锁定。
158段已解除锁定。
159线程标识的地址错误。
160传递到DosExecPgm的参数字符串错误。
161指定的路径无效。
162信号已暂停。
164无法在系统中创建更多的线程。
167无法锁定文件区域。
170请求的资源在使用中。
173对于提供取消区域进行锁定的请求不明显。
174文件系统不支持锁定类型的最小单元更改。
180系统检测出错误的段号。
183当文件已存在时,无法创建该文件。
186传递的标志错误。
187找不到指定的系统信号灯名称。
196操作系统无法运行此应用程序。
197操作系统当前的配置不能运行此应用程序。
199操作系统无法运行此应用程序。
200代码段不可大于或等于64K。
203操作系统找不到已输入的环境选项。
205命令子树中的进程没有信号处理程序。
206文件名或扩展名太长。
207第2环堆栈已被占用。
208没有正确输入文件名通配符*或?,或指定过多的文件名通配符。
209正在发送的信号错误。
210无法设置信号处理程序。
212段已锁定且无法重新分配。
214连到该程序或动态链接模块的动态链接模块太多。
215无法嵌套调用LoadModule。
230管道状态无效。
231所有的管道实例都在使用中。
232管道正在关闭中。
233管道的另一端上无任何进程。
234更多数据可用。
240取消会话。
254指定的扩展属性名无效。
255扩展属性不一致。
258等待的操作过时。
259没有可用的数据了。
266无法使用复制功能。
267目录名无效。
275扩展属性在缓冲区中不适用。
276装在文件系统上的扩展属性文件已损坏。
277扩展属性表格文件已满。
278指定的扩展属性句柄无效。
282装入的文件系统不支持扩展属性。
288企图释放并非呼叫方所拥有的多用户终端运行程序。
298发向信号灯的请求过多。
299仅完成部分的ReadProcessMemoty或WriteProcessMemory请求。
300操作锁定请求被拒绝。
301系统接收了一个无效的操作锁定确认。
487试图访问无效的地址。
534算术结果超过32位。
535管道的另一端有一进程。
536等候打开管道另一端的进程。
994拒绝访问扩展属性。
995由于线程退出或应用程序请求,已放弃I/O操作。
996重叠I/O事件不在信号状态中。
997重叠I/O操作在进行中。
998内存分配访问无效。
999错误运行页内操作。

nginx错误:File Not Found

使用php-fpm解析PHP,”No input file specified”,”File not found”是令nginx新手头疼的常见错误,原因是php-fpm进程找不到SCRIPT_FILENAME配置的要执行的.php文件,php-fpm返回给nginx的默认404错误提示。

比如我的网站doucument_root下没有test.php,访问这个文件时通过抓包可以看到返回的内容。

HTTP/1.1 404 Not Found
Date: Fri, 21 Dec 2012 08:15:28 GMT
Content-Type: text/html
Proxy-Connection: close
Server: nginx/1.2.5
X-Powered-By: PHP/5.4.7
Via: 1.1 c3300 (NetCache NetApp/6.0.7)
Content-Length: 16

File not found.

很多人不想用户直接看到这个默认的404错误信息,想自定义404错误.

给出解决办法前我们来先分析下如何避免出现这类404错误,然后再说真的遇到这种情况(比如用户输入一个错误不存在的路径)时该怎么办,才能显示自定义的404错误页。

一、错误的路径被发送到php-fpm进程

出现这类错误,十个有九个是后端fastcgi进程收到错误路径(SCRIPT_FILENAME),而后端fastcgi收到错误路径的原因大都是配置错误。

常见的nginx.conf的配置如下:
[codesyntax lang=”php”]

server {
    listen   [::]:80;
    server_name  example.com www.example.com;
    access_log  /var/www/logs/example.com.access.log;  

    location / {
        root   /var/www/example.com;
        index  index.html index.htm index.pl;
    }

    location /images {
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}

[/codesyntax ]
这个配置中有很多不合理的地方,其中一个明显的问题就是root指令被放到了location / 块。如果root指令被定义在location块中那么该root指令只能对其所在的location生效。其它locaiont中没有root指令,像location /images块不会匹配任何请求,需要在每个请求中重复配置root指令来解决这个问题。因此我们需要把root指令放在server块,这样各个location就会继承父server块定义的$document_root,如果某个location需要定义一个不同的$document_root,则可以在location单独定义一个root指令。

另一个问题就是fastCGI参数SCRIPT_FILENAME 是写死的。如果修改了root指令的值或者移动文件到别的目录,php-fpm会返回“No input file specified”错误,因为SCRIPT_FILENAME在配置中是写死的并没有随着$doucument_root变化而变化,我们可以修改SCRIPT_FILENAME配置如下:

[codesyntax lang=”php”]
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
[/codesyntax ]

所以我们不能忘记在server块中配置root指令,不然$document_root的值为空,只会传$fastcgi_script_name到php-fpm,这样就会导致“No input file specified”错误。

二、请求的文件真的不存在

当nginx收到一个不在的.php文件的请求时,因为nginx只会检查$uri是否是.php结尾,不会对文件是否存在进行判断,.php结尾的请求nginx会直接发给php-fpm处理。php-fpm处理时找不到文件就会返回“No input file specified”带着“404 Not Found”头。

解决办法:

我们在nginx拦截不存在的文件,请求并返回自定义404错误

使用 try_files 捕捉不存在的urls并返回错误。
[codesyntax lang=”php”]

location ~ .php$ {
 try_files $uri =404;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME ....
 ...................................
 ...................................
}

[/codesyntax ]
上面的配置会检查.php文件是否存在,如果不存在,会返回404页面。

 

本文参考至:  运维与架构

解决主机500错误

使用主机有时候登陆网站的时候会出现“Internal Server Error,500 error”。经上网搜索,发现出现该种情况通常有以下三种可能:

1.服务器资源超载

如果你没对网站文件做过什么更改的话,最有可能的是同服务器的资源超载:即同一时间内处理器有太多的进程需要处理的时候,会出现500错误。借助SSH,可以在命令行中输入以下命令查看:

ps faux
ps faux |grep <em>username</em>

如果你查到某个进程消耗过多资源,可以用kill命令强制关闭这个进程,只需输入该进程的进程号(Pid):

kill -9 <em>pid</em>

2.文件权限设置错误

500错误还有可能是对文件设置了不正确的权限:

后台目录和文件的权限默认应该是755,而图片,文字等html文件应该是644。所以如果在刚刚上传文件后出现500错误,应该主要检查文件权限设置。

可以使用FTP软件选中所有文件,然后批量修改文件权限。也可以在SSH中更改相应的权限…

chmod 644 [filename]

3 .htaccess文件写入错误的代码

在使用某些wordpress SEO插件的时候,插件会改写.htacess文件,如果语法错误的话就有可能造成500错误!

在.htaccess文件中,可能因为添入了一些与源文件冲突的代码。所以为了检测到错误语句,最好的方法是为语句添加注释来逐条验证。因为注释之后,语句就不再起作用。

逐条添加“#”在语句前面,如

DirectoryIndex default.html
AddType application/x-httpd-php5 php

你可以添加#到该命令前,从而实现注释效果:

DirectoryIndex default.html
#AddType application/x-httpd-php5 php

这个方法可以迅速定位错误的命令,如果你找不到错误的段落,可以尝试把所有的命令全部添上注释然后反过来逐条删除#检查错误!判断出错误语句之后,可以删掉#恢复正常!