这是我的问题:
当我对某个大型存储库进行 pull/fetch 时,我想在控制台以外的其他地方显示进度(例如在网站上)我知道在 git 1.7.1.1 中有选项 --progress 但我不能使用这个版本并且必须与 1.6.0.4 保持一致
有没有人知道如何观看 git fetch/pull 进度(例如如何提取当前的下载百分比)
我理解运行的想法git fetch <remote>,因为远程分支可以通过git checkout <remote>/<branch>.
但是如果我只是运行它是如何工作的
git fetch path/to/other/repo
Run Code Online (Sandbox Code Playgroud)
如何结账对应的分行?请注意,该操作以静默方式运行(即使使用--verbose),并且不会创建新分支。
编辑:只是要清楚:我完全理解 git 如何与遥控器一起工作。我只是对这种替代语法感到好奇git fetch path/to/remote,或者git fetch <url>. 它应该如何工作?为什么它不创建新分支?为什么即使在详细模式下它也会静默运行?预期用途是什么?
运行git fetch时,会给出一些数字:
$ git fetch upstream
remote: Counting objects: 77, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 47 (delta 19), reused 39 (delta 11)
Unpacking objects: 100% (47/47), done.
From http://github.com/jbossas/jboss-as
ef19bd4..b5015c1 master -> upstream/master
Run Code Online (Sandbox Code Playgroud)
它们有用吗?我想知道例如在该遥控器中发生了多少次提交.这似乎不包含在这些数据中(在这种情况下,它是5次提交).
(我知道我可以看到日志或其他任何东西;只是想知道那是什么.)
我有一个位于 的裸仓库main.git,我试图foo在另一个仓库中获取一个分支(比如说)test,它刚刚被git init'd:
fetchtest/
|- main.git/
|- test/
|- .git/
Run Code Online (Sandbox Code Playgroud)
定期使用Git命令,我可以做一个git fetch ../main.git foo:foo,这将创建一个新的分支foo中test/,并获取了分支所需要的对象。然后我想做同样的事情,但使用 JGit 以编程方式,即不使用 git CLI 而只使用 Java 代码。我无法使用 git CLI:
Git git = Git.init().setDirectory(new File("fetchtest/test/")).call();
git.fetch().setRemote(new File("../main.git"))
.setRefSpecs(new RefSpec("foo:foo"))
.call();
Run Code Online (Sandbox Code Playgroud)
但它只是错误:
org.eclipse.jgit.api.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137)
// ......
Caused by: org.eclipse.jgit.errors.TransportException: Remote does not have foo available for fetch.
at org.eclipse.jgit.transport.FetchProcess.expandSingle(FetchProcess.java:349)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:139)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:113)
at …Run Code Online (Sandbox Code Playgroud) 我正在寻找远程分支并陷入某种循环.
我取一次然后得到:
$ git fetch
* [new branch] minorRelease/something-> origin/minorRelease/something
Run Code Online (Sandbox Code Playgroud)
然后我再次获取并得到:
$ git fetch
* [new branch] minorRelease/Something-> origin/minorRelease/Something
Run Code Online (Sandbox Code Playgroud)
相同的分支但有资本S.
我试图从以下文件夹中删除该文件.git/refs/remotes/origin/minorRelease,但是当再次获取时,我得到两个并返回上面的循环:
$ git fetch
* [new branch] minorRelease/Something-> origin/minorRelease/Something
* [new branch] minorRelease/something-> origin/minorRelease/something
Run Code Online (Sandbox Code Playgroud) 因此,我基本上要做的是从一个远程仓库下拉一个给定的提交(由其SHA标识),然后将其作为新分支(其名称我自动生成)推送到另一个远程仓库.源代码将会有所不同,这些都是一次性操作,所以我不想git remote add这些遥控器,我不想为提交创建引用/分支.而且我不想改变任何本地分支机构的HEAD.
那么,我如何才能获取给定的远程提交(以及对我来说是新的任何父提交)并将它/它们添加到我的本地git数据库中?
git pull 隐含地涉及合并或变基,所以这是不可能的.
我试过了,git fetch https://github.com/foo/bar.git 7d0969daba1fdf9d5bb9bc9a2847fd1bc1c7e426
但这只是导致
error: no such remote ref 12819ad8e10e5906df5352d7d8fec1fceb1f3afc
(是的,我确认在那个遥控器上存在提交SHA;看起来git在这里不接受SHA).
我的意思是,我想我可以想出一个任意的本地分支名称,以便始终将提交下拉,然后在每次推送后删除该分支,但这似乎是不优雅的......
我试图将上游的变化拉到我的前叉.我试过了git fetch https://github.com/someuser/someproject,但它固执地拒绝做任何事情.它只是说了一些完全神秘而没有做的事情,即:
From https://github.com/someuser/someproject
* branch HEAD -> FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
但是当我将URL添加为命名远程时,事情发生了变化:
> git remote add upstream https://github.com/someuser/someproject.git
> git fetch upstream
remote: Counting objects: 340, done.
remote: Compressing objects: 100% (268/268), done.
remote: Total 340 (delta 145), reused 18 (delta 16), pack-reused 44
... etc ...
Run Code Online (Sandbox Code Playgroud)
那有什么区别?为什么在没有先添加遥控器的情况下指定遥控器时什么都不做?当我尝试从URL中获取时,它到底告诉我的是什么?
当父提交图中没有包含它们的标签或分支时,就会创建孤立提交。例如,如果你犯了一个分支foo,添加提交a和b,然后删除分支(即删除引用foo从提交b),那么这两个a和b,除非你救了他们的哈希值将是不可到达的。
x-x-x-x <- master
\
a-b <- foo (reference then deleted or reset to somewhere on master)
Run Code Online (Sandbox Code Playgroud)
孤立提交的基本 Git 行为是最终垃圾收集并删除它们(我听说默认至少是 30 天)。
将以往的Git从一个回购移动孤儿提交到另一个使用git clone,git fetch或git push命令?
或者 Git 是否有效地忽略了任何不直接调用孤儿哈希(例如checkout或cherry-pick)的操作的这些提交?
如何用所有远程分支覆盖所有本地分支?
这是我当地的分支机构:
client-side-js-framework
client-side-js-framework-2
client-side-js-framework-3
handlebars
master
Run Code Online (Sandbox Code Playgroud)
还有我的远程分支:
client-side-js-framework
handlebars
master
no-network-connection
Run Code Online (Sandbox Code Playgroud)
我希望我的本地分支能够镜像我的远程分支,因为我的远程分支更加最新。换句话说,我当地的分支机构应该是:
client-side-js-framework
handlebars
master
no-network-connection
Run Code Online (Sandbox Code Playgroud)
这可以通过一个(或两个)命令来完成,而不是基本上删除我的本地存储库并重新克隆它吗?
据我了解,每当您运行远程对象时,都会在本地下载远程对象,并创建一个名为远程分支提交的轻量级git fetch指针。FETCH_HEADHEAD
由于分支只是一个指针,这与创建本地分支有什么不同?哪些设计考虑因素支持在使用时不创建本地分支的情况git fetch?