相当于' hg share'?

时间:2015-11-05 15:19:36

标签: git mercurial

有没有办法在git中共享存储库的历史记录而无需再次克隆整个文件夹?相当于Mercurial的东西

hg share project project-branch

https://www.mercurial-scm.org/wiki/ShareExtension

2 个答案:

答案 0 :(得分:5)

如果我理解hg share的文档,那么最接近的Git等效项将是git worktree,这是2.5版本中的新功能:

  

管理连接到同一存储库的多个工作树。

     

git存储库可以支持多个工作树,允许您一次签出多个分支。使用git worktree add,新的工作树与存储库相关联。这个新的工作树称为“链接工作树”,而不是“git init”或“git clone”编写的“主工作树”。存储库有一个主要工作树(如果它不是裸存储库)和零个或多个链接工作树。

我相信它仍处于测试阶段,并且明确警告不要将其与子模块一起使用。

从存储库运行git worktree add ../some/path/ branch会创建一个新的工作副本,并在branch签出../some/path/

可以在on GitHub's blog找到对此新命令的更长概述。

答案 1 :(得分:0)

评论时间太长,所以有新答案:

我发现此流程在hg中是完全正常的-在git中这是不可能的,不是用worktree,而不是其他任何命令,似乎(?)

3 bash-4.2# cd m/
3 bash-4.2# hg init
3 bash-4.2# cd ..
3 bash-4.2# hg share m pm1
updating working directory
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# hg share m pm2
updating working directory
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# cd pm1/
3 bash-4.2# touch foo
3 bash-4.2# hg add foo
3 bash-4.2# hg commit -m test foo
3 bash-4.2# cd ../pm2/
3 bash-4.2# hg log
changeset:   0:d5e4a426dca0
tag:         tip
user:        xxx
date:        Wed Apr 10 15:32:32 2019 +0200
summary:     test

3 bash-4.2# ls
3 bash-4.2# hg summary
parent: -1:000000000000  (no revision checked out)
branch: default
commit: (clean)
update: 1 new changesets (update)     # <--------------- ! :-)
3 bash-4.2# hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 bash-4.2# ls
foo

在git中,它们不支持该流程。 它只允许一次检出同一件事-而且它们的理由(不干净的工作树)并不能说服我,因为在hg中这也是可能的,如您所见。

同样在hg中,要更新您共享的一个,好,对其进行更新(hg pull)。

在git中,您必须说:

git fetch origin +refs/heads/*:refs/heads/* --prune