将本地仓库移动到远程单个文件

时间:2017-02-14 19:56:26

标签: linux git

如果有人在其他地方被问到我而且我错过了,我道歉。我发现了许多问题和答案,这些问题和答案与我正在尝试的内容相近,但没有一个完全符合。

我在本地git存储库中有本地文件和项目。几个月前我创建了存储库,以此来保护和跟踪我自己的工作。我们公司的其余部分使用SVN,所以我是第一个在这里使用git的人。我将它设置在Linux服务器上的主目录中。这个repo包含了过去几个月里我工作的许多提交,分支和标签。

我想将该回购移动到我们公司的Linux服务器(不在我的主目录)中更易于访问的位置,以便其他人可以克隆并使用整个回购(包括所有标记,分支,历史等)他们认为合适。

我考虑过复制或移动整个文件结构,但我希望它是一个单独的文件 - 即myRepo.git。

我如何做到这一点,以便myRepo.git包含我已经提交的所有信息,这样当有人克隆这个回购并运行'gitk --all'时,他们会看到所有的分支,标签等? / p>

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以从其他人可以访问的地方git clone --bare您的回购。

最基本的远程Git repo只不过是一个裸克隆。裸克隆意味着它没有结帐,它只是.git目录的内容。结帐将意味着人们可能会尝试将该结帐用作他们自己的git工作目录并进行更改,这会让其他人将更改推送到存储库时感到困惑。

例如,我将在foo/中创建一个新的存储库并提交一个文件。

$ git init foo
Reinitialized existing Git repository in /Users/schwern/tmp/foo/.git/
$ rm -rf foo
$ git init foo
Initialized empty Git repository in /Users/schwern/tmp/foo/.git/
$ cd foo
$ touch this
$ git add this
$ git ci -m 'First commit'
[master (root-commit) 1a0bddf] First commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 this

然后我将其彻底克隆到bar/(克隆不必通过网络进行)。

$ git clone --bare foo bar
$ ls
HEAD  config  description  hooks  info  objects  packed-refs  refs

它不具有结帐功能,而是具有.git目录的内容。

现在我可以克隆了。

$ git clone bar baz
Cloning into 'baz'...
done.
$ cd baz/
$ git log
commit 1a0bddf415f48d71fa3aacc79c07c233d91ed4a9 (HEAD -> master, origin/master, origin/HEAD)
Author: Michael G. Schwern <schwern@pobox.com>
Date:   Tue Feb 14 12:01:13 2017 -0800

    First commit

克隆在本地文件系统上。当然,Git将通过网络进行克隆。通常,它使用sshhttpsgit clone user@host/path ssh host user path ssh struct Foo { cb: Option<&'static Fn(u32)->u32>, } fn f1(a: u32) -> u32 { a } fn main() { let foo = Foo{cb: Some(&f1)}; } borrowed value does not live long enough f1 {{1}}

因此,您可以将您的repo放在其他人{{1}}访问的任何地方,例如开发服务器或具有SVN服务器的同一主机。

这是分享您的Git存储库最简单的方法。有许多更复杂的Git服务器可以提供Web访问和更多协议。从非常稀疏的GitWebGitlab,Github克隆,你可以在本地免费托管。

您可以在Pro Git's chapter on Git Servers中了解详情。

答案 1 :(得分:0)

一个功能齐全的git repo 单个文件,并且没有办法实现它。也就是说,复制你的工作回购并不是最好的办法。

如果拥有单个文件更重要的是让repo完全正常运行 - 即你不在乎你的同事是否可以推送它 - 那么你可以创建一个包文件。

git bundle create /path/to/my/repo.bundle --all

你的同事可以从中克隆,将其添加为遥控器,从中拉取或取出......但是它们无法推送到它(你也不能;要添加它,你必须重新创建它)

要克隆的共享仓库通常应该是一个简单的回购。这大致相当于工作仓库中.git目录的副本。如果您现有的仓库位于/ path / to / my / repo,您​​可以在/ path / to / shared / repo创建一个合适的裸仓库

cd /path/to/shared
git clone --mirror /path/to/my/repo

请注意,我使用--mirror代替--bare;这与refs的复制方式有关,如果你打算将其视为以后的原点,那将更好地工作。

然而此时/ path / to / my / repo仍然被认为是上游。解决这个问题

cd /path/to/shared/repo
git remote remove origin
cd /path/to/my/repo
git remote add origin /path/to/shared/repo
相关问题