Question

I have setup my remote git and local git on my mac I was able to create a git repo (git init myrepo) on the remote machine (Linux) Added few files and committed them no problems (git add , git commit -m "test")

From my local I was able to clone the repo from the remote with no issues (git clone ssh://user@IP/Path)

So far so good no issues.

I have created few files locally and used git add and commit then tried to push them to the remote server using git push origin master

initially I received an error message and searching around the solution was to run this command directly on the remote server: git config receive.denyCurrentBranch ignore

That fixed the issues and now I am able to push successfully:

$ 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

I even checked to make sure that the files match

$ 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

However when I go to my remote repo (root@IP/path/myrepo) I can't see any of the new files!!! Any idea what I am doing wrong?

I ran git log on the remote server and I see all my notes:

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

My remote repo:

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

My local repo:

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

Thanks

NEW NOTE:

OK, so I wasn't using bare branch for sure, I think its the command I ran on the remote system

git config receive.denyCurrentBranch ignore

I have deleted both repos on local and remote and created it again (No bare for sure)

Then attempted a push like so and received this error:

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'

This time round I entered refuse instead of ignore

git config receive.denyCurrentBranch refuse

Running git push generated a new error message:

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'

How do I uncheck the branch so I could successfully push from local to remote repo?

Was it helpful?

Solution

You are pushing to a non-bare repo (which works because of the receive.denyCurrentBranch being set to ignore).

But it it possible that your remote non-bare repo:

  • has checked out a different branch than master (and since you are pushing to master, the content of the working tree wouldn't change)
  • or has checked out a commit (meaning you are in a detached HEAD state, which you can confirm with a git branch inside that repo, to see if any of those branches is marked as checked out or not).

I have deleted both repos on local and remote and created it again (No bare for sure)

By default, receive.denyCurrentBranch is set to 'refuse', so your error messages are consistent with that.

Try setting it on 'ignore', and since your remote repo is on master, your push will go through.

But you won't see any file: you need a post-receive hook which would checkout your working tree or reset it to HEAD, for the files to actually appear.

See for instance "Git: making pushes to non-bare repositories safe"

my post-receive hook looks like this:

export GIT_WORK_TREE=..
git checkout -f HEAD

The OP reports in the comments:

the answer to the original issue is run this on the remote server:

git config receive.denyCurrentBranch ignore 

Then Add export GIT_WORK_TREE=.. git checkout -f HEAD To your gitrepo <PATH>/.git/hooks/post-receive

That did the trick and I am now able to push files from my local to the remote repo!!!

OTHER TIPS

You are probably pushing to a bare repository. You must clone it someplace and pull from the remote in order to see live changes.

To create a bare repository at myPath; you'll need to be logged into a shell on myIP:

  1. mv myPath myPath2 # saves the live repository
  2. git clone --bare myPath2 myPath # creates the bare repository

Now your push should work and follow @VonC's instructions above in configuring your post-receive hook.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top