我是Git的新手,我将开始为现有的Web应用程序开发新模块。此应用程序目前托管在Web服务器上,我想使用Git作为版本控制工具。我使用git init --bare newdev.git
创建了一个新的裸存储库,但我不知道如何添加服务器上已有的文件。
谢谢。
答案 0 :(得分:5)
哇,坚持住。让我们备份一些。你是“git”的新手,所以你需要一些基础知识! : - )
出于您的目的,有两种存储库:
“裸”存储库没有任何可以做任何工作的地方。这就是它“裸露”的原因 - 是什么使它成为一个“推”到的安全的地方。推送到一些非裸机的问题就是这个(git实际上会阻止你,使用error: refusing to update ...
,但是如果git允许你这样做就会出现问题 :
config
。config
。config
,并将其更改推送给Alice。通过不让任何人“进入”它,一个裸露的存储库回避了这个问题。
还有另外一个问题,那就是:你怎么得到这个东西 - 首先是裸机回购?它没有工作的地方!
答案是:你没有从那里开始,你从你自己的回购开始,没有其他人有副本。你在那里写了一些初始版本。然后在共享服务器上通过复制创建一个新的裸仓库:
sharedserver$ cd /place/where/bare/repos/go
sharedserver$ git clone --bare ssh://cosmins.machine.name/path/to/initial project.git
现在“sharedserver”在/place/where/bare/repos/go/project.git
中有一个裸仓库,而你(以及Alice和Bob等)可以git clone
。{/ p>
(“共享服务器”可以是类似github的东西,它有一种不同的方法来创建原始的非共享的共享仓库。我不使用github,也不能真正说出任何相关内容。 )
(可以将常规的,非裸的repo转换为裸的repo,反之亦然,但这有点痛苦。只需通过git clone --bare
创建裸的。)
另一种侧重“工作被覆盖”问题的方法是根本不使用push
。如果每个人都在对等共享系统中合作,那么Alice可以从Bob和Cosmin pull
获得,而Bob可以从Alice和Cosmin中pull
,等等。请注意,这会导致大量人员pull
,这就是共享服务器出现的原因。你们都可以在那里见面,而不必总是去彼此的家。
答案 1 :(得分:3)
您要做的只是在现有文件所在的文件夹中git init
(无 - - )。
然后git add .
(或git add filename.ext
个别文件)。最后git commit
。
提交文件后,您可以使用git clone
将存储库放到另一台计算机上,可能通过ssh网址,例如git clone ssh://example.com/path/to/repo/.git ./
从评论中编辑:
如果两个存储库位于同一分支上,则不能push
从一个存储库到另一个存储库。您有三种选择:
pull
从源存储库更改为目标存储库在三个选项中,选项#3是使用git时最常见的做法。
选项#2更类似于像Subversion这样的非分布式系统,或者像Github.com这样具有“权威”代码副本的git系统。
选项#1实际上是一个黑客攻击,除非你别无选择,否则不应该使用它。
要从现有存储库创建裸存储库,您可以手动转换存储库(existing SO question w/good answer),也可以git clone --bare /path/to/my_repo/.git ./my_repo.git
创建新的干净裸存储库。我会推荐第二个选项,它更安全/更干净,你不会弄乱现有的存储库,但你可以做任何最好的事情。
答案 2 :(得分:1)
是的,在sources文件夹中使用git init,将所需文件添加到存储库,然后将存储库克隆到本地计算机。由于您已经创建了一个裸存储库,因此您应该将.git文件夹移开,当您确定不需要时,可以将其删除。