简体   繁体   English

如何通过http允许匿名推送到git存储库?

[英]How can I allow anonymous push to a git repository over http?

I cannot find an example here: http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html 我在这里找不到一个例子: http//www.kernel.org/pub/software/scm/git/docs/git-http-backend.html

Is it possible? 可能吗?

Add this to your httpd.conf (Assuming /srv/git contains your repos) 将它添加到你的httpd.conf(假设/ srv / git包含你的repos)

<Directory "/usr/lib/git-core*">
    Order allow,deny
    Allow from all
</Directory>

SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

Then make sure apache can write to your repository directory (from inside repo run this where http is your apache user) 然后确保apache可以写入您的存储库目录(从内部repo运行,其中http是您的apache用户)

chown -R http .

In the repository you have created on the server open up .git/config and add the following 在服务器上创建的存储库中打开.git / config并添加以下内容

[http]
    receivepack = true

and finally in the repository root run 最后在存储库根运行中

git config --bool core.bare true

alternatively if you want a the files available on the server (for a web site or whatever) then disregard the above command and edit .git/config with this 或者,如果你想要一个服务器上可用的文件(对于一个网站或其他),那么忽略上面的命令并用这个编辑.git / config

[receive]
    denyCurrentBranch = false

and then run this on the server when you want to update the dir (there must be a better way so please let me know) 然后当你想要更新目录时在服务器上运行它(必须有更好的方法所以请告诉我)

git reset --hard

Anonymous push and browsing with git-http-backend and gitweb 使用git-http-backend和gitweb进行匿名推送和浏览

Note that DAV is significantly slower than the new "smart-http" support since git 1.6.6. 请注意,自git 1.6.6以来,DAV明显慢于新的“smart-http”支持。 The new method allows the entire pack to be transmitted at once, and not as individual files. 新方法允许一次传输整个包,而不是单个文件。

The setup below eliminates the need for custom config in each repo (http.receivepack), or the need for hard resets. 下面的设置消除了每个repo(http.receivepack)中自定义配置的需要,或者需要进行硬重置。 Just make each new re[po with 只需将每个新的重新组合起来

git --bare init --shared

YOu can also use gitweb to provide browable URLs at the same location. 你也可以使用gitweb在同一个位置提供可浏览的URL。

Note: Because access is controlled by apache you can add any Auth requirements (htaccess or ldap, etc) to the setup for each repository. 注意:由于访问由apache控制,因此您可以将任何身份验证要求(htaccess或ldap等)添加到每个存储库的设置中。


Just make a new git_support.conf file, and include it in apache (add include statement in httpd.conf) 只需创建一个新的git_support.conf文件,并将其包含在apache中(在httpd.conf中添加include语句)

#
#  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/

The result is the ability to push/pull: 结果是推/拉的能力:

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

And you can browse those changes online.. 你可以在线浏览这些变化.. gitweb提供了一个可浏览的界面

Source: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README 资料来源: http//repo.or.cz/w/alt-git.git?a = blob_plain; f = gitweb / README

Just don't put any AuthType in your Apache config (so no LocationMatch or Location elements). 只是不要在Apache配置中放置任何AuthType (因此没有LocationMatchLocation元素)。

If you don't have AuthType , that means your Apache will simply pass along your git request to the cgi program git-http-backend . 如果您没有AuthType,这意味着您的Apache只会将您的git请求传递给cgi程序git-http-backend
So no authentication will take place in that case: anonymous push will be possible. 因此,在这种情况下不会进行身份验证:匿名推送将是可能的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM