Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git在推送时创建远程存储库_Git_Git Push_Git Remote_Git Config - Fatal编程技术网

Git在推送时创建远程存储库

Git在推送时创建远程存储库,git,git-push,git-remote,git-config,Git,Git Push,Git Remote,Git Config,我一直在努力想办法解决这个问题,但我很难做到这一点。我目前正在从事一个开源项目,该项目要求我允许用户将推送到远程存储库,而不需要那里已有的。我希望避免手动登录到服务器并运行gitinit或gitinit--bare 出于显而易见的原因,当尝试将本地存储库推送到不指向远程服务器上现有存储库的路径时,我会出现以下错误: fatal: '/var/repositories/myrepo' does not appear to be a git repository fatal: The remote

我一直在努力想办法解决这个问题,但我很难做到这一点。我目前正在从事一个开源项目,该项目要求我允许用户推送到远程存储库,而不需要那里已有的。我希望避免手动登录到服务器并运行
gitinit
gitinit--bare

出于显而易见的原因,当尝试将本地存储库推送到不指向远程服务器上现有存储库的路径时,我会出现以下错误:

fatal: '/var/repositories/myrepo' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
但我希望能够运行以下命令,例如:

git push origin master
如果还不存在,则在
/var/repositories
中创建
/myrepo
。我怎样才能做到这一点?我假设它是某种您可能会在远程服务器上设置的(全局)git config设置,或者是本地设置的(特定于存储库的)git config,但我无法理解

任何帮助都将不胜感激

谢谢

  • 从远程签出并跟踪分支:

    git checkout -t origin/funbranch
    
    git push origin mybranch
    
  • 分支:

    git checkout -b mybranch
    
  • 向上推你的新分支,它将在远程自动创建一个新分支:

    git checkout -t origin/funbranch
    
    git push origin mybranch
    
  • 应该是“创建了新的远程分支源/mybranch”

    如果你仍然被“远程端挂断”,这听起来像是一个安全问题。您是否正确安装了SSH密钥,并且在远程服务器上具有写入权限


    大多数开源项目的工作方式是,您必须创建一个fork(一个克隆),用于执行您的工作,因为大多数时候您没有对repo的写入权限。当您有更改时,您将向存储库所有者发送请求,他/她将从您的fork中提取他们想要的更改。

    目前无法使用
    git push
    在远程上创建存储库。最好是编写一行脚本,如下所示:

    #!/bin/bash
    ssh $1 "git init --bare $2" &&
    git push ssh://$1/$2
    
    希望你能加入;如果不能,可以使用某种文件系统访问,通过转储到适当的文件/目录结构(可能在本地创建并复制)手动创建repo。您还可以在此过程中创建一个命名的remote


    这实际上是2010年Git调查中最受欢迎的一次,所以也许你会在明年的某个时候实现你的愿望

    我知道这是个老问题,但我在谷歌搜索其他东西时偶然发现了这个问题


    我发现,能够推送到远程服务器并让它在不存在存储库的情况下创建存储库的最好方法是使用gitolite。查看安装指南,安装非常简单,如果更改一些配置设置,可以使用现有的/var/repositories来存储repo。

    您可以在远程上编写包装脚本,并将command=“/path/to/wrapper”前置到授权密钥行

    command="/usr/local/bin/gitaccess" ssh-rsa ...
    
    在这个包装器中,您将检查SSH\u原始\u命令。Git发出以下命令:

    git receive-pack '/path/provided' # when pushing
    git upload-pack '/path/provided' # when pulling
    
    如果SSH_ORIGINAL_命令不是空的,并且以其中一个命令开始,则检查路径,必要时创建存储库,在其中安装所需的任何配置,然后执行该命令

    如果SSH_ORIGINAL_命令为空,并且您希望为用户提供shell访问权限,那么可以调用shell

    如果SSH_ORIGINAL_命令不是空的,但不是以git命令开头,那么如果希望允许用户具有shell访问权限,则只需执行提供的命令

    这里有一些Ruby代码要演示。请注意,我没有测试它,还有改进的余地(例如,我们不应该硬编码/bin/bash)


    您还可以在authorized_键中将参数传递给此脚本,以标识用户并选择他们是否应该具有shell访问权限。我这样做也是为了控制每个存储库的访问。如果要将此参数带到git钩子,只需创建一个环境变量。

    Hi。谢谢你的回复!虽然这可能是大多数人看到这个问题的一个有效答案,但它并不是我想要的答案。我需要能够推动我的本地开发分支,例如远程登台分支。但我不希望创建一个新分支来完成跟踪和所有工作。您知道有没有其他方法可以在不更改本地存储库的情况下实现这一点?抱歉,如果问题有点不清楚,我想做的可能不是很常见。:)@迈克尔:你在这里的评论听起来一点也不像你的问题。这里您讨论的是将一个本地分支推送到另一个远程分支(可能存在也可能不存在)。但是,您的问题是关于将存储库推送到一个远程存储库,而该存储库尚不存在,必须创建。感谢您的回复,很抱歉我的回复太晚。你所说的应该确实有效。是的,我有SSH的能力。实际上,我使用GitHub上的PushAnd库解决了这个问题。我不完全确定它为什么能与安装的这个库一起工作,但它确实可以!我相信它安装了一个post-push钩子/脚本,运行一些命令来初始化存储库等等。为了避免
    &
    超过两行,为什么不使用
    bash-e
    ?您还可以运行
    git init--bare/path/to/$2
    @Eric这只是一个例子,但我通常更喜欢显式错误处理(不必担心bash在-e中做什么和不允许做什么),并且能够调整、复制粘贴到其他脚本中,等等,而不必担心行为的改变。这个答案应该是肯定的。我没有试过这个,但它是合理的。