git 相当于 Subversion "switch" ?



我有一些SVN存储库,我正在考虑切换到git,但是他们使用Subversion"切换"功能的方式我不知道如何在git中模拟。我该怎么做呢?

举一个具体的例子:我把主目录放在SVN上。我在我工作的许多电脑上试用过。这对很多事情来说都很方便,但对少数事情来说就不那么方便了。例子:

  • 我有一个www/目录,我建立一个个人网站。我只在家里的机器上使用这个网站,事实上,我不想把里面的文件溅到其他机器上。在repo本身中,这是一个空目录,但是当我将repo签出到我的家庭机器时,我也将这个目录切换到repo中一个不相关的位置,www/实际所在的位置。所以大多数机器只得到一个空的www/,但选定的机器得到内容。

  • 我有一个Documents/目录,包含MacOS文档。有很多。它们在我的许多Linux机器上毫无用处。出于空间原因,我使用了上面提到的相同技巧:在repo中,Documents是空的,但是在repo路径的其他地方有一个实际的Documents文件夹,我在mac上切换到Documents/。

这不是switch命令的本意。

无论如何,您正在考虑使用git submodules来实现您想要的。www和Documents可以是独立的git库,你可以把它们作为子模块放在你的git主库中。这样,当任何人克隆repo时,他们将得到空文件夹,除非他们更新子模块。

如果你不想要子模块,你必须明确地克隆www和Documents的单独的repo,并放在你的repo中。注意git不会跟踪空文件夹,所以你不能为这些文件夹设置占位符。

如果你不想要外部仓库,另一种方法(不推荐)是用www: 创建孤立分支。
git checkout --orphan
git rm -rf .
mkdir www
touch www/a
git add www
git commit -m "adding www"
git checkout master
git checkout www -- www

PS:真正的git等效svn switch,因为它的目的是:

git checkout <branchname>

最新更新