Answers:
我认为您在远程端建立了一个裸仓库,将远程端git init --bare
添加为本地仓库(git remote add origin URL
)的推/拉跟踪器,然后在本地就说了git push origin master
。现在,任何其他存储库都可以pull
从远程存储库中获取。
git push origin master
失败并显示“找不到存储库”错误,请尝试git update-server-info
在远程操作的地方进行操作git init --bare
git update-server-info
但遇到了错误 fatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
为了最初设置任何Git服务器,您必须将现有存储库导出到新的裸存储库中-一个不包含工作目录的存储库。通常这很容易做到。为了克隆您的存储库以创建新的裸存储库,请使用带有该--bare
选项的clone命令。按照惯例,裸仓库目录以结尾.git
,如下所示:
$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/
该命令单独获取Git信息库,没有工作目录,并专门为其创建目录。
现在您有了存储库的裸露副本,您所需要做的就是将其放在服务器上并设置协议。假设您已经建立了一个git.example.com
具有SSH访问权限的服务器,并且想要将所有Git存储库存储在该/opt/git
目录下。您可以通过以下方式复制裸存储库来设置新存储库:
$ scp -r my_project.git user@git.example.com:/opt/git
此时,对同一/opt/git
目录具有读访问权限的服务器具有SSH访问权限的其他用户可以通过运行以下命令来克隆您的存储库
$ git clone user@git.example.com:/opt/git/my_project.git
如果用户SSH进入服务器并对该/opt/git/my_project.git
目录具有写访问权限,则他们还将自动具有推入访问权限。如果运行带有该--shared
选项的git init命令,Git将自动向存储库中正确添加组写权限。
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
获取Git存储库,创建裸版本并将其放置在您和您的协作者可以通过SSH访问的服务器上非常容易。现在您可以在同一项目上进行协作了。
scp
解决方案在实践中比IMO更适合IMO init --bare
。虽然首先在本地克隆,然后复制到服务器,但仍然感觉有点难看。希望git有一个命令可以一次性完成。
--shared
为我工作。我想知道,如果你使用会发生什么git init --shared
而不做--bare
一个...
scp
,如果远程不支持该存储库,则该远程存储会更好git init --bare
(例如git 1.5.5,2008)。我认为即使遥控器完全没有git,这也应该起作用。
给在Windows上创建本地副本并希望在Unix行系统上创建相应的远程存储库的人的说明,在该行上,文本文件在类似Unix的系统上由开发人员在进一步的克隆上获得LF结尾,而在Windows上则获得CRLF结尾。
如果在设置行尾翻译之前创建了Windows系统信息库, 那么您会遇到问题。Git的默认设置是不翻译,因此您的工作集使用CRLF,但是您的存储库(即,存储在.git下的数据)也已将文件另存为CRLF。
当您按下遥控器时,已保存的文件将按原样复制,不会发生行尾翻译。(行结束翻译发生在将文件提交到存储库时,而不是在推送存储库时)。您最终在类Unix的存储库中获得了CRLF,这不是您想要的。
要在远程存储库中获取LF,必须通过重新规范Windows存储库来确保LF首先在本地存储库中。这对Windows工作集仍然具有CRLF结尾,将不会有可见的影响,但是当您按下遥控器时,遥控器将正确获得LF。
我不确定是否有一种简单的方法来判断Windows存储库中的行尾-我猜您可以通过设置core.autocrlf = false然后克隆来测试它(如果存储库具有LF尾声,则克隆将具有LF)。
上面两种流行的解决方案之间有一个有趣的区别:
如果您像这样创建裸仓库:
cd / outside_of_any_repo mkdir my_remote.git cd my_remote.git git init-裸
然后
cd /your_path/original_repo
git remote add origin /outside_of_any_repo/my_remote.git
git push --set-upstream origin master
然后git使用以下关系在'original_repo'中设置配置:
original_repo origin --> /outside_of_any_repo/my_remote.git/
后者作为上游遥控器。而且上游远程配置中没有任何其他远程。
但是,如果您反过来这样做:
(来自original_repo目录) 光盘.. git clone --bare original_repo /outside_of_any_repo/my_remote.git
然后,“ my_remote.git”的配置结束,“ origin”指向“ original_repo”作为远程,remote.origin.url等于本地目录路径,如果要移动它可能不合适到服务器。
尽管如果不合适,很容易在以后删除“远程”引用,但仍必须将“ original_repo”设置为指向“ my_remote.git”作为上游远程对象(或指向何处)共享)。因此,从技术上讲,使用方法2,您可以通过几个步骤来获得相同的结果。但是,#1似乎是一种更直接的方法来创建“中央裸共享仓库”,该仓库源于本地服务器,适合于迁移到服务器,涉及的步骤更少。我认为这取决于您希望远程回购发挥的作用。(是的,这与此处的文档冲突。)
警告:我通过使用真实的回购在本地系统上进行测试,然后在结果之间进行逐个文件的比较来了解以上内容(在撰写本文时于2019年8月开始)。但!我仍在学习,因此可能会有更正确的方法。但是我的测试帮助我得出结论,#1是我目前首选的方法。
远程存储库通常是裸存储库-没有工作目录的Git存储库。由于存储库仅用作协作点,因此没有理由在磁盘上签出快照;这只是Git数据。用最简单的术语来说,裸仓库是项目的.git目录的内容,仅此而已。
您可以使用以下代码创建一个裸git存储库:
$ git clone --bare /path/to/project project.git
具有远程git存储库的一种选择是使用SSH协议:
通过SSH进行自我托管时,Git的通用传输协议。这是因为大多数地方已经设置了对服务器的SSH访问,如果没有,则很容易做到。SSH还是经过身份验证的网络协议,并且由于它无处不在,因此通常很容易设置和使用。
要通过SSH克隆Git存储库,您可以指定如下
ssh://
网址:$ git clone ssh://[user@]server/project.git
或者,您可以将较短的类似于scp的语法用于SSH协议:
$ git clone [user@]server:project.git
在上述两种情况下,如果您未指定可选的用户名,则Git会假定您当前以该用户身份登录。
优点
使用SSH的优点很多。首先,SSH相对容易设置-SSH守护程序很常见,许多网络管理员都有使用它们的经验,并且许多OS发行版都由它们设置或具有管理它们的工具。接下来,通过SSH的访问是安全的-所有数据传输都经过加密和身份验证。最后,像HTTPS,Git和本地协议一样,SSH高效,在传输数据之前使数据尽可能紧凑。
缺点
SSH的不利方面是它不支持对Git存储库的匿名访问。如果您使用的是SSH,则即使是只读权限的人员也必须具有SSH访问权限,这不利于SSH促进人们可能只是希望克隆您的存储库以对其进行检查的开源项目。如果仅在公司网络内使用它,则SSH可能是唯一需要处理的协议。如果您想允许匿名只读访问您的项目,并且还想使用SSH,则必须设置SSH以便您进行推送,但要设置其他内容以供他人使用。
有关更多信息,请检查参考: 服务器上的Git-协议
您需要在远程服务器上创建目录。然后使用“ git init”命令将其设置为存储库。这应该针对您拥有的每个新项目(每个新文件夹)完成
假设您已经使用ssh键设置并使用了git,我编写了一个小的Python脚本,当从工作目录执行该脚本时,它将设置一个远程目录并将该目录初始化为git repo。当然,您将必须编辑脚本(仅一次)以告诉它所有存储库的服务器和根路径。
在这里检查-https: //github.com/skbobade/ocgi
通常,您只需使用以下init
命令即可设置git repo
git init
就您而言,远程上已经有一个仓库。根据您访问远程存储库的方式(使用url内的用户名或处理验证的ssh密钥),仅使用以下clone
命令:
git clone git@[my.url.com]:[git-repo-name].git
还有其他克隆仓库的方法。如果您的计算机上安装了ssh密钥设置,可以验证是否提取存储库,则可以通过这种方式进行调用。如果要在其中包含密码和用户名以登录到远程存储库,则还有URL的其他组合。