如果有人在其他地方被问到我而且我错过了,我道歉。我发现了许多问题和答案,这些问题和答案与我正在尝试的内容相近,但没有一个完全符合。
我在本地git存储库中有本地文件和项目。几个月前我创建了存储库,以此来保护和跟踪我自己的工作。我们公司的其余部分使用SVN,所以我是第一个在这里使用git的人。我将它设置在Linux服务器上的主目录中。这个repo包含了过去几个月里我工作的许多提交,分支和标签。
我想将该回购移动到我们公司的Linux服务器(不在我的主目录)中更易于访问的位置,以便其他人可以克隆并使用整个回购(包括所有标记,分支,历史等)他们认为合适。
我考虑过复制或移动整个文件结构,但我希望它是一个单独的文件 - 即myRepo.git。
我如何做到这一点,以便myRepo.git包含我已经提交的所有信息,这样当有人克隆这个回购并运行'gitk --all'时,他们会看到所有的分支,标签等? / p>
感谢您的帮助。
答案 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将通过网络进行克隆。通常,它使用ssh
或https
。 git 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访问和更多协议。从非常稀疏的GitWeb到Gitlab,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