有没有办法从远程Git回购中只检索一个特定的提交,而不将其克隆到我的PC上?远程回购的结构与我的完全相同,因此不会有任何冲突,但我不知道如何做到这一点,我不想克隆那个巨大的存储库。

我是新来的,有什么办法吗?


当前回答

最后,我找到了一种方法来克隆特定的提交使用git的樱桃。 假设你在本地没有任何存储库,你要从远程提交特定的文件,

1)在本地和git init中创建空仓库

2) git远程添加url-of-repository

3) git获取原点[这将不会移动您的文件到您的本地工作空间,除非您合并]

4)“输入你需要的”

完成了。这样,您将只有来自特定提交的文件在您的本地。

Enter-long-commit-hash:

你可以使用-> git log——pretty=oneline来获得

其他回答

您只需克隆一次,因此如果您已经有了远程存储库的克隆,那么从它提取就不会再次下载所有内容。只需指出您想要拉哪个分支,或者获取更改并签出您想要的提交。

从新的存储库中获取带宽非常便宜,因为它只会下载您没有的更改。考虑到Git以最小的负载做出正确的事情。

Git将所有内容都存储在。Git文件夹中。提交不能孤立地获取和存储,它需要所有的祖先。它们是相互关联的。


为了减少下载大小,你可以让git只获取与特定分支相关的对象或提交:

git fetch origin refs/heads/branch:refs/remotes/origin/branch

这将只下载包含在远程分支分支中的提交(以及您错过的那些),并将其存储在origin/branch中。然后您可以合并或签出。

你也可以只指定一个SHA1提交id——但注意你必须使用完整的40个字符不缩写的标识符:

git fetch origin 96de5297df87096de5297df87096de5297df8709:refs/remotes/origin/foo-commit

这将只下载指定的SHA-1 96de5297df87096de5297df8709(以及您错过的祖先)的提交,并将其存储为(不存在的)远程分支origin/foo-commit。

我查了一下我的git repo

git pull --rebase <repo> <branch>

允许git为分支拉入所有代码,然后我对我感兴趣的提交进行了重置。

Git reset——hard <commit-hash>

希望这能有所帮助。

你可以简单地获取远程回购:

git fetch <repo>

在那里,

<repo>可以是一个远程回购名称(例如origin),甚至是一个远程回购URL(例如https://git.foo.com/myrepo.git)

例如:

git fetch https://git.foo.com/myrepo.git 

在你获得repo之后,你可以合并你想要的提交(因为这个问题是关于检索一个提交,而不是合并,你可以使用cherry-pick来选择一个提交):

git merge <commit>

<commit>可以是SHA1提交

例如:

git cherry-pick 0a071603d87e0b89738599c160583a19a6d95545

or

git merge 0a071603d87e0b89738599c160583a19a6d95545

如果是你想合并的最新提交,你也可以使用FETCH_HEAD变量:

git cherry-pick (or merge) FETCH_HEAD

我认为'git ls-remote' (http://git-scm.com/docs/git-ls-remote)应该做你想要的。不用用力,取或拉。

您可以简单地获取远程回购的单个提交

git fetch <repo> <commit-id>

在那里,

<repo>可以是一个远程回购名称(例如origin),甚至是一个远程回购URL(例如https://git.foo.com/myrepo.git) <commit- ID >是提交的ID

例如

git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545

在获取提交(以及丢失的祖先)之后,您可以简单地用它签出

git checkout FETCH_HEAD

注意,这将使你进入“分离的头脑”状态。