如何克隆repo(使用libgit2)
我想要做什么git clone用,但确实libgit2.我可能会问的是,究竟是什么git clone深入.
这就是我到目前为止所做的事情:
git_remotegit checkout以某种方式做.而现在我不知道该怎么做.我唯一的猜测是加载.idx到a git_index并使用git_repository_set_index,但是也没有显示任何文件.
编辑
我测试git checkout master了在半克隆的回购上运行,这就完成了工作.现在我只需要了解如何使用libgit2进行操作,似乎问题跟踪器中有一些有用的信息.
编辑2
我现在将添加我当前的代码,希望有一天有人能发现它有用,希望能成为我从未找到的快速启动代码.注:我使用的是Obj-C和Objective-Git这里的,但它主要是纯C.
+ (GTRepository *)cloneFromRemoteURL:(NSURL *)remoteURL toLocalURL:(NSURL *)localURL
{
// Let's suppose the URL looks like: https://github.com/libgit2/libgit2.git
// Then we need to get a URL like this too: git://github.com/libgit2/libgit2.git
// This may be a bit dodgy, but it will …Run Code Online (Sandbox Code Playgroud) 我想创建没有使用clone的标签的裸git项目.但是通过谷歌知道没有像" --no-tags" 这样的选项.
有没有办法克隆没有像下面的标签?
$ git clone {path}/test.git --no-tags --mirror
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!!:)
我不想在我的机器上浪费空间,我只想查看存储库的历史(对于每个分支).这就是为什么,我做了一个:
git clone --no-checkout
Run Code Online (Sandbox Code Playgroud)
在我这样做之后,有人推了一些东西.我必须做一些事情再次更新历史,但我不知道是什么.当然,我可以使用git checkout和git pull,但我不需要文件,我只需要更新.git文件夹.我尝试使用git fetch,但似乎历史记录没有更新.
我想从我公司的服务器克隆一个git存储库到我的个人电脑.从"外部"访问这些服务器的唯一方法是将每个ssh登录到"machine1"
ssh user@machine1.company.xy
Run Code Online (Sandbox Code Playgroud)
不幸的是,git没有安装在那台特定的机器上.所以git克隆就像
git clone ssh://user@machine1.company.xy/path/to/repo <local-repo-path>
Run Code Online (Sandbox Code Playgroud)
不行.我需要做的是在通过'machine1'登录网络后更改到安装了git的另一台机器'machine2'.因此,要使克隆工作,我将不得不执行一个命令
ssh machine2
Run Code Online (Sandbox Code Playgroud)
在实际执行git命令之前.有没有办法做到这一点?像预克隆钩子之类的东西可能吗?
有可能以某种方式将远程存储库打包到一个文件(补丁?),将该文件复制到本地计算机并从该文件克隆?
期待您的提示和建议!
我知道我可以通过指定--depth标志来做一个浅层克隆.但是,这会以整数作为其值.有没有办法让一个相同的行为datetime?我不希望克隆整个存储库并检查以前的状态.
我必须自动克隆存储库并获取它的所有子模块.存储库子模块的URL指定在.gitmodules.如果我要使用默认设置,我会这么做
git clone --recursive https://username:password@url.git
Run Code Online (Sandbox Code Playgroud)
问题是凭据不包含在.gitmodules文件中,当我克隆时我会被提示.我必须使用HTTPS而不是SSH.
我尝试使用git config提交凭据:
git clone https://username:password@url.git my_repo
cd my_repo
git submodule init
git config submodule.my_submodule.url "https://username:password@url/my_submodule.git"
git submodule update
Run Code Online (Sandbox Code Playgroud)
但是在上次更新步骤中我被提示输入凭据.我已经检查过子模块url是否正确并且.git/config文件中有正确的凭据.
ubuntu@site3-user03:/projects$ git clone git://git.alsa-project.org/alsa-driver.git
Run Code Online (Sandbox Code Playgroud)
被执行了.它导致了以下输出
Cloning into 'alsa-driver'...
remote: Counting objects: 208801, done.
remote: Compressing objects: 100% (41538/41538), done.
remote: Total 208801 (delta 162528), reused 206283 (delta 160012)
Receiving objects: 100% (208801/208801), 37.00 MiB | 1.53 MiB/s, done.
Resolving deltas: 100% (162528/162528), done.
Checking connectivity... done.
ubuntu@site3-user03:/projects$
Run Code Online (Sandbox Code Playgroud)
但是,由于某些未知原因,克隆过程不包括检出文件的阶段
:100%(xyz/zyx),完成.
通常,克隆过程包括结账到工作空间.在最终效果中,我的私人分叉有空的工作空间,我自己必须决定哪些分支可能不是直截了当.
ubuntu@site3-user03:/projects/alsa-driver$ git ls-remote origin
a1c6fbc1a65d8a755425d0b56077868148512891 HEAD
1721fb542b00f1c7aebc923732068f403b6062ad refs/heads/build
a1c6fbc1a65d8a755425d0b56077868148512891 refs/heads/master
71b3b2b41dfbdeda78e2e7b62fe2afa8b451fb6e refs/heads/mirror
b044dfe04f636d87fd391b575ba41e495e68e973 refs/heads/release
6386d9e39e6f364698648f4e4741897f83b00121 refs/tags/build/v1.0.1
234b00ebe6e1513c3ce8cdd83999c255bd5516eb refs/tags/build/v1.0.10
f888eb06d4c7af89faa2f9dda189d488312ecb07 refs/tags/build/v1.0.10rc1
e4c4d1037521f536b79f8d145979ec869db353f9 refs/tags/build/v1.0.10rc2
....
many more tags
Run Code Online (Sandbox Code Playgroud)
我的期望是克隆执行基于远程HEAD的签出,指向远程的某些提交.
跳过退房阶段的可能原因是什么? …
假设我递归地克隆一个存储库。
$ git clone --recursive ssh://server/project/client
Cloning into 'client'...
remote: Counting objects: 191, done
remote: Finding sources: 100% (191/191)
remote: Total 191 (delta 53), reused 159 (delta 53)
Receiving objects: 100% (191/191), 27.59 KiB | 0 bytes/s, done.
Resolving deltas: 100% (53/53), done.
Checking connectivity... done.
Submodule 'gui' (ssh://server/project/client/gui.git) registered for path 'gui'
Cloning into 'gui'...
remote: Counting objects: 3213, done
remote: Finding sources: 100% (3213/3213)
remote: Total 3213 (delta 1272), reused 3107 (delta 1272)
Receiving objects: 100% (3213/3213), 47.88 …Run Code Online (Sandbox Code Playgroud) Bitbucket是否保留谁克隆或更新其本地存储库的日志,而不仅仅是提交?是否可以访问此信息?这对查看哪些团队成员已克隆或拉动很有用,因此我可以肯定地知道他们做了他们应该做的事情并正确地做到了。谢谢
如何在不实际克隆其包含的所有文件的情况下向项目中添加本地子模块?我想避免在本地复制我的项目文件.
我知道可以实现这种事情,因为当您克隆包含子模块的项目时,默认情况下不会克隆这些项目.你必须手动完成:
git clone url-of-repo-containing-submodules.git
git submodule init sub-mod
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
比方说,我有一个带有外源repo lib-sobmodule的git repo 元项目.
我可以破解它以避免文件重复:
cd /path/to/metaproject
git submodule add ../path/to/lib-sobmodule
git commit -m "lib-sobmodule added..."
git push
cd .. && rm -rf meta-project
git clone url-of-meta-project.git
Run Code Online (Sandbox Code Playgroud)
Tadam!lib-sobmodule的文件在我的桌面上不重复.但它不是一个很好的解决方案,因为它导出然后导入/从git遥控器...
是否有一个选项或方法可以阻止克隆本地项目而不必复制它包含的所有文件?
免责声明:这几乎是一个克隆问题,是否有办法在git submodule add没有克隆它的情况下回购?.但由于答案集中在30K git子模块的要求,他们没有给出我在这里描述的更常见用例的满意解决方案.
git ×10
git-clone ×10
bitbucket ×1
c ×1
date ×1
git-checkout ×1
git-config ×1
git-tag ×1
objective-c ×1
proxy ×1
ssh ×1