我正在使用git,但是以集中式方式。我有一个服务器托管一个仓库,我们在该仓库上进行拉取/推送操作。当在另一台机器上克隆/拉取该仓库时,我注意到其中几个文件夹是空的(当我得到一台新电脑并将该仓库克隆到它时,我才注意到这一点)。我查看了gitolite Web界面,并发现这些文件夹的权限为“m---------”,而其他文件夹则为drwxr-xr-x
。我不确定它是如何变成这样的...... 我尝试了一些方法,但无法解决。
我正在使用git,但是以集中式方式。我有一个服务器托管一个仓库,我们在该仓库上进行拉取/推送操作。当在另一台机器上克隆/拉取该仓库时,我注意到其中几个文件夹是空的(当我得到一台新电脑并将该仓库克隆到它时,我才注意到这一点)。我查看了gitolite Web界面,并发现这些文件夹的权限为“m---------”,而其他文件夹则为drwxr-xr-x
。我不确定它是如何变成这样的...... 我尝试了一些方法,但无法解决。
这可以通过查看gitweb源码进行解释:
# convert file mode in octal to symbolic file mode string
sub mode_str {
my $mode = oct shift;
if (S_ISGITLINK($mode)) {
return 'm---------';
} elsif (S_ISDIR($mode & S_IFMT)) {
return 'drwxr-xr-x';
} elsif (S_ISLNK($mode)) {
return 'lrwxrwxrwx';
} elsif (S_ISREG($mode)) {
# git cares only about the executable bit
if ($mode & S_IXUSR) {
return '-rwxr-xr-x';
} else {
return '-rw-r--r--';
};
} else {
return '----------';
}
}
通过S_IFGITLINK => 0160000
,可以创建一个特殊模式的子模块
自从2007年和此补丁之后,gitweb中会显示子模块条目:
目前,在超级模块(当前仓库)中只有指向子模块条目历史记录的链接,因为gitweb不知道在哪里搜索子模块存储库对象。
因此,它们并不是空目录,而是子模块的根目录。
请参见 "Git-轻松拉取所有子模块的最新版本" 获取更多信息。
.gitmodules
文件中声明。如果您真的想要完全合并两个仓库,您需要一个子树合并策略(https://dev59.com/YHNA5IYBdhLWcg3wmfEa#899428):http://git-scm.com/book/en/Git-Tools-Subtree-Merging - VonC