我一直在寻找如何解决这个问题,但我似乎找不到任何适合我的东西。所以我以为我会问你。
我最近学会了如何使用git进行源代码控制,并决定开始将它用于我已经构建的网站。我有网站的服务器(不是我自己的。从arvixe购买服务器空间)已经安装了git。我开始设置,转到我的主文件夹(通过ssh)并运行
git init
然后我想将我已经拥有的所有文件添加到git中,所以我跑了:
git add .
然后提交它们:
git commit .
我希望能够从我的笔记本电脑推送到服务器,所以我这样做是为了获得一个裸存储库:
git init --bare
(我在谷歌搜索问题并发现它在其他情况下有效。在此之前我尝试通过ssh检查一个虚拟分支但是当我这样做时,我从笔记本电脑推送到服务器实际上没有改变任何东西。)
在此之后,我通过ssh和sourcetree将存储库克隆到我的笔记本电脑上。当我在笔记本电脑上进行更改并尝试将它们推送到远程仓库时,我收到以下错误消息:
stdin: is not a tty
/etc/bashrc: line 100: $HISTFILE: ambiguous redirect
remote: error: refusing to update checked out branch: refs/heads/master[K
remote: error: By default, updating the current branch in a non-bare repository[K
remote: error: is denied, because it will make the index and work tree inconsistent[K
remote: error: with what you pushed, and will require 'git reset --hard' to match[K
remote: error: the work tree to HEAD.[K
remote: error: [K
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to[K
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into[K
remote: error: its current branch; however, this is not recommended unless you[K
remote: error: arranged to update its work tree to match what you pushed in some[K
remote: error: other way.[K
remote: error: [K
remote: error: To squelch this message and still keep the default behaviour, set[K
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.[K
To ssh://ihlenfmt@laurieihlenfield.com/home/ihlenfmt
! [remote rejected] master -> master (branch is currently checked out)
我对git很新,所以我很可能做了一些愚蠢的事。谁知道我哪里出错了?
答案 0 :(得分:0)
问题:您希望将内容推送到非裸服务器存储库(其中已将文件签出为工作副本)。从技术上讲,这是可能的,但这不是一个正常的"建立。我会给你一个"修复"对于你目前的情况: 之一:
a)在您的服务器上,将git repo初始化为' bare',即
git config core.bare true
这样,您可以使用其中一个允许的git协议(包括ssh)从其他计算机访问它。
或b)在服务器上:
git config receive.denyCurrentBranch ignore
OR(git v2.3 +)c)
git config --local receive.denyCurrentBranch updateInstead
请记住,当您从便携式计算机上推送并同时在服务器上提交时,上述选项将导致您遇到问题。
更好的解决方案是在其他地方(甚至在同一台服务器上)创建一个单独的git repo,您可以通过Web服务器帐户和笔记本电脑访问它们。然后在您的网络服务器和笔记本电脑中克隆此repo。例如:
</home/user/some-dir-accessible-via-ssh>$ git init . --bare
</your-webserver-root>$ git init . #(not bare)
</your-webserver-root>$ git commit #(etc)
</your-webserver-root>$ git push </home/user/some-dir-accessible-via-ssh> master
如果一切正常,
</your-webserver-root>$ git remote add origin </home/user/some-dir-accessible-via-ssh>
在笔记本电脑上
$git clone <ssh://user@serverip/home/user/some-dir-accessible-via-ssh>
您的工作流程如下: