Problem with git in local


I have a virtual machine with ubuntu where I have git installed as a server and another with ubuntu that I use as a client. Start the repository on the server and then on the client. In the client I indicate the files with add. , I do the commit, and I push indicating the server's repository: git push ssh: //[email protected]/home/alberto/git/app master

So that I do not get an error when doing push on the server I have to place: git config receive.denyCurrentBranch ignore

Once done, the files in the / home / alberto / git / app directory are not created on the server. Why do not you create?

Why do I have to use receive.denyCurrentBranch ignore in the server repository?

some help, thank you very much


[email protected]:/var/www/html/email# git init
Initialized empty Git repository in /var/www/html/email/.git/
[email protected]:/var/www/html/email# git add .
[email protected]:/var/www/html/email# git status
En la rama master

Commit inicial

Cambios para hacer commit:
  (use <<git rm --cached <archivo>...>> para sacar del stage)

    nuevo archivo: ._email.class.php
    nuevo archivo: correos.txt
    nuevo archivo: email.class.php
    nuevo archivo: lib/class.phpDataClass.php
    nuevo archivo: lib/class.phpmailer.php
    nuevo archivo: lib/class.pop3.php
    nuevo archivo: lib/class.smtp.php

[email protected]:/var/www/html/email# git commit -m "first commit"
[master (root-commit) a86c2c9] first commit
 7 files changed, 4389 insertions(+)
 create mode 100755 ._email.class.php
 create mode 100755 correos.txt
 create mode 100755 email.class.php
 create mode 100755 lib/class.phpDataClass.php
 create mode 100755 lib/class.phpmailer.php
 create mode 100755 lib/class.pop3.php
 create mode 100755 lib/class.smtp.php
[email protected]:/var/www/html/email# git remote add origin ssh://[email protected]/home/alberto/git/email
[email protected]:/var/www/html/email# git push -u origin master
[email protected]'s password: 
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 34.20 KiB | 0 bytes/s, done.
Total 10 (delta 0), reused 0 (delta 0)
To ssh://[email protected]/home/alberto/git/email
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
[email protected]:/var/www/html/email# git status
En la rama master
Su rama est? actualizada con <<origin/master>>.
nothing to commit, working directory clean
[email protected]:/var/www/html/email# 


$ git init
Initialized empty Git repository in /home/alberto/git/email/.git/
$ git config receive.denyCurrentBranch ignore
$ ls
$ ls -a
.  ..  .git
asked by Alberto Suárez Pérez 18.05.2018 в 20:00

1 answer


Traditionally, a repository git that you want to do push , was not a normal repository. It was a repository that had no "working copy".

As I suppose you know, the working copy is the folder that contains the files, other folders, etc. about which you are taking version control. In addition to the working copy, the git repositories have another folder called .git (hidden by starting point) where the entire history is saved and which is the repository itself.

In a client you typically have both the repository and the working folder. A command like "checkout" takes things out of the repository and copies them to the working folder. Commands such as "add" and "commit" take files from the working folder and store them in the repository.

Well, a "remote" repository that you want to do push , must consist only of the repository and not the work folder. For that, that repository must be created with:

$ git --bare init

The logic of this is that perhaps the repository that you make push of has an owner who is also working and who may not like the fact that his working copy suddenly changes by a push that you have made. So to ensure that such a thing does not happen, you force the working copy to be non-existent and only be a "naked" repository ( bare ).

So, answering your questions:


Why do I have to use receive.denyCurrentBranch ignore in the server repository?

Because, not being created as bare , it will reject any push attempt, unless you configure it to tell you what to do in the face of those attempts.


Once done, the files in the / home / alberto / git / app directory are not created on the server. Why do not you create?

Because the ignore option that you have set indicates precisely that, that you save the changes in the repository but that you do not update the working copy (you could manually update it by executing git checkout master in the server folder).

Recent versions of git support this configuration option on a "non-bare" server:

$ git config receive.denyCurrentBranch updateInstead

This option causes you to update your working copy when someone changes the repository via push . But be careful with this option, because as I explained before, the original behavior of git to prevent these push had a reason to be and with this option we are skipping it.

answered by 18.05.2018 в 21:24