J'ai en quelque sorte supprimé le répertoire entier de ma branche de code. J'ai cloné un nouveau. Cela a bien fonctionné sauf pousser.
~/workspace/wtf (mybranch)]$ git Push Origin mybranch
error: Cannot access URL [my url], return code 22
fatal: git-http-Push failed
git pull fonctionne, cependant. Comment puis-je le réparer?
J'ai commis l'erreur d'utiliser https au lieu de ssh pour une nouvelle copie. Depuis lors, j'ai apporté des modifications et des modifications, mais je ne pouvais pas pousser pour des raisons évidentes.
Pour récupérer, j'ai simplement changé la section [remote "Origin"] dans .git/config de
à
url = [email protected]: AIFDR/riab_core.git
Après cela, je pourrais pousser à nouveau.
Le nouveau support "smart-http" depuis git 1.6.6. La nouvelle méthode permet de transmettre l’ensemble du pack en une seule fois, et non sous forme de fichiers individuels.
Vous pouvez également utiliser gitweb pour fournir des URL puissantes au même endroit.
Remarque: étant donné que l'accès est contrôlé par Apache, vous pouvez ajouter toutes les exigences relatives aux autorisations (htaccess ou ldap, etc.) à la configuration de chaque référentiel.
Cette réponse suppose que vous possédez le serveur distant et que vous souhaitez ajouter/réparer le support http.
FIRST: Vérifiez les journaux Apache, il est probable qu'une erreur soit refusée/impossible de localiser une autorisation lorsque Apache tente d'exécuter les scripts cgi basés sur git-http.
Créez simplement un nouveau fichier git_support.conf et incluez-le dans Apache (ajoutez la commande include dans httpd.conf)
#
# Basic setup for git-http-backend
#
SetEnv GIT_PROJECT_ROOT /opt/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER #IMportant !!! This could be your problem if missing
<Directory /opt/git> # both http_backend and gitweb should be somewhere under here
AllowOverride None
Options +ExecCGI -Includes #Important! Lets Apache execute the script!
Order allow,deny
Allow from all
</Directory>
# This pattern matches git operations and passes them to http-backend
ScriptAliasMatch \
"(?x)^/git/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/opt/git/libexec/git-core/git-http-backend/$1
# Anything not matched above goes to displayable gitweb interface
ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/
Le résultat est la capacité de pousser/tirer:
me@machine /tmp/eddies $ git pull
Already up-to-date.
me@machine /tmp/eddies $ touch changedFile
me@machine /tmp/eddies $ git add .
me@machine /tmp/eddies $ git commit -am"commiting change"
[master ca7f6ed] commiting change
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 changedFile
me@machine /tmp/eddies $ git Push Origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 239 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To http://mysecretdomain.com/git/eddies
0f626a9..ca7f6ed master -> master
Et vous pouvez parcourir ces modifications en ligne.
Source: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README
Pour activer un " git Push " sur http, vous devez activer WebDAV sur le serveur Web. Pour faire cela sur Apache Webserver, éditez simplement le fichier de configuration:
vim /etc/httpd/conf/httpd.conf
Recherchez ensuite la ligne commençant par:
<Directory "/var/www/html">
Ajoutez la ligne suivante juste après:
Dav On
Assurez-vous de ne pas commenter la ligne suivante dans httpd.conf:
LoadModule dav_fs_module modules/mod_dav_fs.so
Après cela, vous êtes prêt. Redémarrez le serveur Web Apache en utilisant:
service httpd restart
Assurez-vous également que tous les fichiers du référentiel git sur le serveur soient accessibles en écriture à l'utilisateur pache: Apache et à son groupe à l'aide de:
chown -R Apache:apache /var/www/html/your_git_repository
Sinon, si vous ne définissez pas les autorisations appropriées, le résultat sera "Erreur PUT: résultat curl = 22, code HTTP = 403" lors de l'exécution d'un "git Push".
Maintenant, faites simplement un "git Push" à partir de votre ordinateur client et tout devrait fonctionner.
Vous ne pouvez pas appuyer sur un référentiel que vous avez cloné via HTTP. Vous devez mettre à jour l'URL avec une URL de type ssh://
ou git://
.
Modifiez la section suivante de votre fichier .git/config:
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://git.repository.url/repo.git
à
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = http://username:[email protected]/repo.git
Ensuite, essayez git Push Origin master
.
Modifiez les informations d'authentification dans vos fichiers de configuration pour d'autres URL de référentiel, si nécessaire, et transférez-les vers la branche requise.
J'ai eu le même problème avec l'opération Push avec git-http-backend, la configuration d'authentification LDAP.
Enfin, j'ai trouvé la solution et la décris dans cette question serverfault
Peut-être que cela aidera quelqu'un avec un problème similaire.
Génial
j'ai eu d'autres erreurs mais ça marche!
j'essaie d'expliquer:
Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
user1520409
ist works.MAIS comment masquer le mot de passe du texte du message Push?