我在共享托管服务器上设置了一个repo。我想从现在开始使用git将我的本地更改直接推送到我的共享主机,但是尽管有正确的消息,我仍然看不到文件中的任何更改:
初始化git repo
cd public_html/.git
git init
git add .
git commit -m 'First commit'
我将它克隆到本地机器上的中央远程仓库
git clone ssh://me@mdomain.ro:15554/home/mydomain/public_html/.git
现在我有一个远程存储库的工作副本 我只有一个名为'master'的分支。我可以看到它:
git branch
我以“origin”名称添加远程存储库:
git remote add origin ssh://me@mdomain.ro:15554/home/mydomain/public_html/.git
我可以列出远程存储库:
git remote
将显示:origin 在这个阶段,我完成了我的工作再次提交我的更改(如上所述) 现在我将更改推送回主存储库所在的远程服务器。
git push origin master
我设法通过将远程存储库转换为裸存储库来实现它:
git config --bool core.bare true
我再次推送数据:
git push origin master
得到了
Compressing objects: 100% (30/30), done.
Writing objects: 100% (32/32), 663.98 KiB, done.
Total 32 (delta 21), reused 0 (delta 0)
To ssh://me@mdomain.ro:15554/home/mdomain.ropublic_html/.git
a416e72..bb19005 master -> master
但是,在浏览器中访问我的网址时,我仍然看不到更改。有什么问题?
答案 0 :(得分:2)
错误消息非常清楚,表明服务器无法更新当前签出的分支(master
)的工作树。
要解决此问题,您可以查看how to convert your server's repo to a bare repo。
另一个选项(尽管我强烈建议不要这样做)是将服务器repo的git配置中的receive.denyCurrentBranch
设置为ignore
或warn
或false
。
如果你要做的是使用git push
作为在服务器上部署新代码的方法,并且你需要有一个工作树,即使是一个裸仓库,你可以看看{ {3}}回答我发布了一些时间,详细说明了如何在服务器上签出单独的工作树并设置一个post-receive挂钩,负责从裸仓库更新这个工作树。
答案 1 :(得分:0)
要让git repo承认push
,必须将其配置为bare
。
裸存储库只包含版本信息。工作文件不在那里。相反,它包含文件夹.git
的全部内容。
您在'服务器'中创建了您的存储库。作为非裸存储库,所以你不能推。如果您刚开始使用git --bare init
再次创建它,但如果您已经进行了重要更改,则需要将其转换为
答案 2 :(得分:0)
此方法适用于git自托管或共享主机...(isn' t github主机或私有存储库)
从胜利或其他操作系统的git Bash开始的第一步:
git push -u origin master
[origin]
您是<alias>
远程
在您托管服务器(共享或支持git
和SSH
的任何服务器)
git log --oneline
你看到你从客户端git Bash推送的最后一次提交。 例如,你看到这样的东西:
6d523ed modify last commit
37b624b .gitignore is now working
f1e0413 add *.zip to ignore file
c5r0d74 add .gitignore
4e87i69 Installing
注意:上面的代码是我的提交。你承诺是不同的。
现在,您必须使用git reset
将您上次在本地计算机上提交的内容分享到您的public_html或您在托管服务器上初始化git的任何位置。
git reset --hard 6d523ed
注意:6d523ed
是SHA-1
上一个Commit
,您可以在上面的文字中看到。
重要提示:我测试了几乎100000方式从我的本地计算机直接共享(git bare)到远程主服务器(public_html),但它无法工作...... !!!!
它可以在GitHub中工作但其他托管服务器在没有使用reset --hard
的情况下无法进行任何更改