昨天,我发布了一个关于如何将Git存储库从我的一台机器克隆到另一台机器的问题,如何从另一台机器"克隆"?.
我现在能够成功地将Git存储库从我的源(192.168.1.2)克隆到我的目标(192.168.1.1).
但是,当我对文件,a git commit -a -m "test"和a 进行编辑时git push,我在目的地(192.168.1.1)上收到此错误:
git push
hap@192.168.1.2's password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: …Run Code Online (Sandbox Code Playgroud) 是否可以使用git push?部署网站?我有一个预感,它与使用git hooksgit reset --hard在服务器端执行有关,但我将如何实现这一目标呢?
我的笔记本电脑上有一个本地Git存储库设置.我想把它推到我的桌面.
我怎样才能做到这一点?
这可能已经得到了回答,但我没有找到一个好的答案.
我来自集中式存储库,例如SVN,通常您只执行检出,更新,提交,还原,合并等等.
Git让我发疯.有很多命令,但最难理解的是为什么很多东西都像他们一样工作.
根据"什么是裸git存储库?" :
使用创建的存储库
git init --bare称为裸存储库.它们的结构与工作目录略有不同.首先,它们不包含源文件的工作或签出副本.
...
创建的裸存储库git init --bare用于... 共享....开发人员将克隆共享裸仓库,在其仓库的工作副本中进行本地更改,然后回退到共享裸仓库以使其他用户可以使用其更改.
- Jon Saints,http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/
但是,从接受的答案"github存储库和git裸存储库之间有什么区别?" :
GitHub上的Git repos是裸的,就像你要推送到[sic]的任何远程仓库一样.
- VonC,https://stackoverflow.com/a/20855207
但是,在GitHub中有源文件.我可以看到他们.如果我创建一个裸存储库,则没有源文件,只有.git工作存储库目录的内容.
这怎么可能?我不明白什么?
您能举例说明为什么我需要一个裸存储库及其以这种方式工作的动机吗?
爱德华汤姆森的回答部分是我想知道的.不过,我会重新提出我的问题:
我发布了第一个链接状态("什么是裸git存储库?"):
它们[裸存储库]不包含源文件的工作或签出副本.
VonC的回答:
GitHub上的Git repos是裸的
两个陈述暗示
Github没有工作副本.
爱德华汤姆森说:
它会在您浏览数据时根据数据呈现网页 - 将数据直接从存储库中提取出来并输出到您的Web浏览器,而不是先将数据写入文件服务器上的磁盘
不知何故,裸存储库必须包含所有数据和源代码.如果没有,那么渲染任何东西都不是不可能的,因为我可以看到所有源代码更新(提交),所有分支(具有各自的源),回购的整个日志等.
存储库的整个数据是否始终位于.git目录(或裸存储库)中,以某种格式可以随时呈现所有文件?这是裸存储库的原因,而工作副本只在给定时间有文件吗?
在github存储库中,我们可以进行git push git pull操作,同时,我们可以通过Web UI提交到存储库.似乎github存储库同时作为裸存储库和工作存储库工作?
但是,在git bare repository中,我们无法将目录提交到存储库.
所以,我的问题是
github存储库和git裸存储库之间有什么区别?
我的主目录位于文件服务器上的远程安装的NFS分区中,并且是常规备份的.我想让我的项目的git存储库位于我的主目录下(以便备份)但我希望我的工作树位于我的工作站的本地磁盘分区中(这样构建速度很快).未备份本地磁盘分区.
关于如何做到这一点的任何想法?我知道我可以克隆NFS存储库并推送到它,但这似乎是不必要的过度杀伤.
是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?
我正在尝试为具有本地版本,登台版本和生产版本的Wordpress安装设置“简单” git工作流。我要做的就是在本地进行更改,然后从本地推送到暂存,从本地推送到生产。起初,我认为这将是一个简单的任务。我已经能够初始化存储库,添加两个远程“ staging”和“ production”,在远程控制器上初始化git,并通常使用以下命令将更改从本地版本推送到暂存和生产服务器:
git add .
git commit -m "some changes"
git push staging master
git push production master
Run Code Online (Sandbox Code Playgroud)
但是,在工作期间的某些时候,发生了一些变化,尽管我仍然可以推送到暂存,但是现在我无法在没有出现错误的情况下推送到生产服务器:
! [remote rejected] master -> master (Working directory has unstaged changes)
Run Code Online (Sandbox Code Playgroud)
当我执行“ git status”时,它说:
On branch master
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
在阅读了关于堆栈溢出的几个相似但不同的问题的答案之后,我尝试了以下方法:
git pull staging master
git pull staging master --rebase
git pull production master
git pull production master --rebase
Run Code Online (Sandbox Code Playgroud)
我也尝试在远程服务器上执行此命令
git config --local receive.denyCurrentBranch updateInstead
Run Code Online (Sandbox Code Playgroud)
我已经完全重新创建了几次服务器和存储库,只是为了完全从头开始重新安装git,但是此问题在一段时间后仍会继续发生,此时,Git实际上正在浪费我的工作流程而不是提供帮助。如果有人对我的错误有任何了解,将不胜感激!
在编辑了我的旧问题几次之后,我创建了一个新问题,因为它现在是一个新问题.
在.git/hooks/post-update我有:
echo "a" >> /home/pi/log
git update-server-info
git stash
git merge testing >> /home/pi/log
Run Code Online (Sandbox Code Playgroud)
进行自动结账.所以我在客户端上运行:
git push testing HEAD:testing
Run Code Online (Sandbox Code Playgroud)
现在我的/home/pi/log包含:
a
Updating ae2f44b..04753a9
Fast-forward
application/views/main/index.php | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Run Code Online (Sandbox Code Playgroud)
但文件没有改变!
$ git merge testing
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
如果我删除脚本,进行推送和运行git stash,git merge testing它的工作原理.
更新
为了测试,我将文件中的数字从17更改为20.如果我运行,我可以看到正确的文件版本
git show application/views/main/index.php
Run Code Online (Sandbox Code Playgroud)
但
vim application/views/main/index.php
Run Code Online (Sandbox Code Playgroud)
仍包含旧号码.但是git声称该文件已更新:
$ git merge testing
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)