我已经在Mac上设置了我的远程git和本地git,我能够在远程计算机(Linux)上创建一个git repo(git init myrepo)。添加了几个文件,并确保它们没有问题(git add,git commit -m“ test ”)
从我的本地服务器,我可以从远程克隆存储库,而没有任何问题(git clone ssh:// user @ IP / Path)
到目前为止,还不错,没有问题。
我在本地创建了一些文件,并使用git add和commit,然后尝试使用git push origin master将它们推送到远程服务器
最初,我收到一条错误消息,搜索解决方案是直接在远程服务器上运行此命令:git config receive.denyCurrentBranch ignore
这样就解决了问题,现在我可以成功进行推送了:
$ git push origin master
git add test.sh
git add git*
git commit -m "Adding 2 new files and updating test.sh"
[master 4dd11a0] Adding 2 new files and updating test.sh
3 files changed, 109 insertions(+)
create mode 100644 gitHowToUrls.txt
create mode 100644 git_howto.txt
git push origin master
Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.91 KiB | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To ssh://root@IP/path/myrepo
ad4a8b2..4dd11a0 master -> master
$ git push -u origin master
Branch master set up to track remote branch master from origin.
Everything up-to-date
$ git push origin HEAD:master
Everything up-to-date
我什至检查以确保文件匹配
$ git ls-remote origin
52543130bff4f9f37a23b01b0c44c7549ab82dd9 HEAD
52543130bff4f9f37a23b01b0c44c7549ab82dd9 refs/heads/master
$ git ls-remote
From ssh://root@IP/path/myrepo
52543130bff4f9f37a23b01b0c44c7549ab82dd9 HEAD
52543130bff4f9f37a23b01b0c44c7549ab82dd9 refs/heads/master
但是,当我转到远程仓库(root @ IP / path / myrepo)时,看不到任何新文件!!!知道我在做什么错吗?
我在远程服务器上运行git log,我看到了所有注释:
root@IP [myrepo]# git log
commit 52543130bff4f9f37a23b01b0c44c7549ab82dd9
Author: joe d <myemail@myemail>
Date: Sat Mar 22 15:56:30 2014 -0700
adding again, since first time didn't work
commit 4dd11a0235cdabe528f8755253989ce85df4fa8b
Author: joe d <myemail@myemail>
Date: Sat Mar 22 15:48:08 2014 -0700
Adding 2 new files and updating test.sh
commit ad4a8b224989dc2131b6a33f41b95ce8b2a5c96a
Author: joe d <myemail@myemail>
Date: Sat Mar 22 11:33:34 2014 -0700
test
commit 956ff16e081587fa59a8cec73fc383744c5c3a5e
Author: joe d <myemail@myemail>
Date: Sat Mar 22 18:32:30 2014 +0000
test
我的远程仓库:
root@IP [myrepo]# ls -la
total 20
drwxr-xr-x 4 root root 4096 Mar 22 18:32 .
drwxr-x--- 6 joe nobody 4096 Mar 22 18:30 ..
drwxr-xr-x 8 root root 4096 Mar 22 18:38 .git
drwxr-xr-x 2 joe joe 4096 Mar 21 22:12 images
-rw-r--r-- 1 root root 992 Mar 22 18:31 index.html
我的本地仓库:
localmachine:myrepo joe$ ls -la
total 32
drwxr-xr-x 8 joe 1668562246 272 Mar 22 16:42 .
drwxr-xr-x 3 joe 1668562246 102 Mar 22 11:33 ..
drwxr-xr-x 15 joe 1668562246 510 Mar 22 16:07 .git
-rw-r--r-- 1 joe 1668562246 445 Mar 22 16:42 gitHowToUrls.txt
-rw-r--r-- 1 joe 1668562246 3291 Mar 22 15:56 git_howto.txt
-rwxr-xr-x 1 joe 1668562246 81 Mar 22 15:43 test.sh
drwxr-xr-x 6 joe 1668562246 204 Mar 22 11:33 images
-rw-r--r-- 1 joe 1668562246 992 Mar 22 11:33 index.html
谢谢
新注:
好的,所以我肯定不是在使用裸分支,我认为它是我在远程系统上运行的命令
git config receive.denyCurrentBranch ignore
我已经删除了本地和远程的两个仓库,并再次创建了它(肯定没有)
然后尝试像这样推送,并收到此错误:
localrepo$ git push origin master
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.98 KiB | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
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 ssh://root@IP/path/myrepo
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://root@IP/path/myrepo'
这次我进入拒绝而不是忽略
git config receive.denyCurrentBranch refuse
运行git push生成新的错误消息:
localRepo$ git push origin master
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.98 KiB | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
To ssh://root@IP/path/myrepo
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'ssh://root@IP/path/myrepo'
如何取消选中分支,以便可以成功地从本地回购推送到远程回购?
您正在推送至非裸仓库(之所以起作用,是因为receive.denyCurrentBranch
被设置为忽略)。
但是,您的远程非裸仓库可能会:
我已经删除了本地和远程的两个仓库,并再次创建了它(肯定没有)
通过默认情况下,receive.denyCurrentBranch
设置为“ refuse
”,所以你的错误信息是与相一致。
尝试将其设置为“忽略”,并且由于您的远程仓库已打开master
,您的推送将继续进行。
但是您将看不到任何文件:您需要一个后接收钩子,该钩子将签出您的工作树或将其重置为HEAD,以使文件实际出现。
例如,请参阅“ Git:保证对非裸存储库的推送安全”
我的接收后挂钩看起来像这样:
export GIT_WORK_TREE=..
git checkout -f HEAD
原始问题的答案是在远程服务器上运行此命令:
git config receive.denyCurrentBranch ignore
然后添加
export GIT_WORK_TREE=.. git checkout -f HEAD
到您的gitrepo<PATH>/.git/hooks/post-receive
那成功了,我现在可以将文件从本地推送到远程仓库了!!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句