2011-07-11 58 views

回答

185

我想你把远程侧,git init --bare纯仓库,添加远程侧推/拉跟踪你的本地仓库(git remote add origin URL),然后在本地你刚才说git push origin master。现在任何其他存储库都可以从远程存储库中获取pull

+0

@Nips:是的,对,对不起。你推动个别分支,的确如此! –

+0

如果我正在使用GUI,该怎么办?如何为所有存储库设置服务器,并且同一网络上的每台PC连接到该服务器? – SearchForKnowledge

+3

如果'git push origin master'失败并显示“repository not found”错误,请尝试在远端执行'git update-server-info',在那里执行了'git init --bare' – HongKilDong

6

对于在Windows上创建本地副本并希望在Unix系统上创建对应的远程存储库的人的说明,其中文本文件在类Unix系统上的开发人员获得更多克隆的LF结尾,但CRLF结束在Windows上。

如果您在setting up line-ending translation之前创建了您的Windows存储库,那么您遇到了问题。 Git的默认设置没有翻译,因此您的工作集使用CRLF,但您的存储库(即存储在.git下的数据)已将文件另存为CRLF。

当您推送到远程时,保存的文件将按原样复制,不会发生行结束翻译。 (当文件被提交到存储库时,而不是在存储库被推送时,行结束转换发生)。你最终会在你的类Unix库中得到CRLF,这不是你想要的。

要在远程存储库中获取LF,必须首先确保LF位于本地存储库中,编号为re-normalizing your Windows repository。这对你的Windows工作集没有明显的影响,它仍然有CRLF结束,但是当你推到远程时,远程将正确地获得LF。我不知道是否有一种简单的方法可以告诉你在Windows库中有哪些行结束符 - 我想你可以通过设置core.autocrlf = false然后克隆来测试它(如果repo有LF结尾,克隆也会有LF)。

53

为了最初设置任何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 [email protected]:/opt/git 

在这一点上,谁也已只读访问同一台服务器到/opt/git目录SSH访问其他用户可以通过运行克隆你的仓库

$ git clone [email protected]:/opt/git/my_project.git 

如果用户SSHS到服务器,并有写权限的目录/opt/git/my_project.git,他们也将自动具有推送权限。如果使用--shared选项运行git init命令,Git会自动将组写入权限添加到存储库。

$ ssh [email protected] 
$ cd /opt/git/my_project.git 
$ git init --bare --shared 

这是很容易采取的Git仓库,创建一个纯的版本,并将其放置在服务器上到你和你的合作者有SSH访问。现在您已准备好在同一个项目上进行协作。

+4

'scp'解决方案在实践中比'init -bare'更好地工作。尽管首先在本地克隆,然后复制到服务器,但它仍然感觉有点丑陋,希望git有一个命令可以一次完成。 – leftaroundabout

+0

为此+1了,因为'--shared'为我工作。我不知道会发生什么,如果你使用'git init --shared'而不做一个'--bare' ... – icedwater

+1

在远程不支持的情况下在本地创建一个裸仓库和'scp', git init --bare'(就像我用git 1.5.5,2008那样)。我认为这应该工作,即使遥控器根本没有git。 –

-3

通常情况下,你可以通过只使用init命令

git init 

在你的情况设置了一个混帐回购协议,已经有一个远程可回购。取决于你如何访问您的远程回购(用URL或处理验证一个SSH密钥中的用户名)只使用clone命令:

git clone [email protected][my.url.com]:[git-repo-name].git 

也有其他的方法来克隆回购。这样你就可以调用它,如果你的计算机上有一个ssh密钥设置,它将验证是否拉动你的存储库。如果您想要在其中包含密码和用户名以登录到远程存储库,还有其他URL组合。

+1

这有多讽刺... 今天有人刚刚低估了这个答案,现在我正在努力推动我的文件。看起来我需要一些git锻炼来再次入手! –

+3

我认为问题在于OP想要一个解决方案在ssh服务器上创建远程repo,但是您描述了如何从远程ssh服务器创建本地repo。你没有回答这个问题。 (不是我是下来。) – peterh

0

您需要在远程服务器上创建一个目录。然后使用“git init”命令将其设置为存储库。这应该为每个新项目(每个新文件夹)完成

假设您已经使用ssh密钥设置和使用git,我编写了一个小型Python脚本,该脚本在从工作目录执行时将设置远程并将该目录初始化为一个git仓库。当然,你将不得不编辑脚本(只有一次),告诉它所有存储库的服务器和根路径。

在这里检查 - https://github.com/skbobade/ocgi

相关问题