Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 通过pendrive共享git存储库_Eclipse_Git - Fatal编程技术网

Eclipse 通过pendrive共享git存储库

Eclipse 通过pendrive共享git存储库,eclipse,git,Eclipse,Git,虽然我的问题看起来类似于,但我使用pendrive代替GitHub,我还有两个备份。好吧,让我在下面描述一下 我将开普勒与EGit和命令行git一起使用,在同一台计算机“C1”的另一个磁盘分区上有本地repo“L1”(带工作集)和远程裸repo“R1”。L1配置为推/拉至R1或从R1拉出。此外,我在pendrive“PD”上创建了R1的裸克隆“P”,因此P被配置为从R1获取。在另一台计算机“C2”上,我制作了一个P的克隆“R2”,所以R2被配置为获取/推送表单/到P,然后使用repo“L2”(带

虽然我的问题看起来类似于,但我使用pendrive代替GitHub,我还有两个备份。好吧,让我在下面描述一下

我将开普勒与EGit和命令行git一起使用,在同一台计算机“C1”的另一个磁盘分区上有本地repo“L1”(带工作集)和远程裸repo“R1”。L1配置为推/拉至R1或从R1拉出。此外,我在pendrive“PD”上创建了R1的裸克隆“P”,因此P被配置为从R1获取。在另一台计算机“C2”上,我制作了一个P的克隆“R2”,所以R2被配置为获取/推送表单/到P,然后使用repo“L2”(带工作集)将项目表单R2签出到Eclipse中,所以L2被配置为获取/推送表单/到R2。它基本上是在pendrive的帮助下在两台计算机之间交换更改,并且在两台计算机上都有裸备份。看起来是这样的:

C1: {L1, R1}; PD: {P}; C2: {R2, L2};
L1 <--pull push--> R1 <--push fetch--> P <--push fetch--> R2 <--push pull--> L2
#!/bin/bash
url=`cat $1.url`;
for f in *.git
do
    cd $f;
    echo "Setting URL to $url$f";   
    git remote set-url origin $url$f;
    git push;
    cd ..;
done;
其配置如下:

C1: {L1, R1}; PD: {P}; C2: {R2, L2};
L1 <--pull push--> R1 <--push fetch--> P <--push fetch--> R2 <--push pull--> L2
#!/bin/bash
url=`cat $1.url`;
for f in *.git
do
    cd $f;
    echo "Setting URL to $url$f";   
    git remote set-url origin $url$f;
    git push;
    cd ..;
done;
L1 R1 P R2 L2

在序列
commit(L1).push(R1)
p.fetch(R1)
R2.fetch(p)
之后,git说R2和p是最新的,但是我对L1进行了commit,它们肯定会有所不同。有什么想法吗?我做错了什么,以及如何让它真正起作用?

你需要做一个
R1.push(p)
p.pull(R1)

R1.push(p)
p.pull(R1)
之间没有区别,除了前者中,
push
必须在
R1
中运行,因此
p
必须是
R1
中的遥控器,而在后者中,
pull
必须从
P
运行,因此
R1
必须是
P
中的遥控器

p
当前未完全更新,您仅获取更改,未合并它们

至于局域网/有限网络问题,您可以尝试将bitbucket用于私有存储库,github用于公共回购。两个位置都应提供其中一个

编辑


我刚刚意识到我的打字错误花费了OP大量的调试工作——我是说
p.pull(R1)
更早,而不是
p.fetch(R1)
。真的很抱歉。
pull
可以被认为是一次操作中的
fetch
+
merge
。事实上,这是我回答的第一行,使用
——我本想让你使用
,而不是
。再一次,非常抱歉沟通不畅。

最后我能够同步所有存储库,但我必须摆脱
fetch
并且只使用
push
命令

有关详情:

  • L1(由Eclipse管理,EGit位于C1上)配置为从R1拉/推/到R1
  • R1(由C1上的命令行git管理)配置为推送到P
  • P配置使用了一个技巧,我将在后面解释
  • R2配置为推送至P
  • L2配置为从R2拉出/推送到R2
至于p配置:正如我所说,它看起来像是A.push(B)的工作原理有点不同 而不是
B.fetch(A)
(两个回购协议都是空的)。所以当我把某物推到P(从R1或R2) 为了与其他远程设备(如R2或R1)同步,我从P执行推送,但我只是 在推送之前更改远程URL。为此,我准备了一个bash脚本(
push all.sh
) 看起来是这样的:

C1: {L1, R1}; PD: {P}; C2: {R2, L2};
L1 <--pull push--> R1 <--push fetch--> P <--push fetch--> R2 <--push pull--> L2
#!/bin/bash
url=`cat $1.url`;
for f in *.git
do
    cd $f;
    echo "Setting URL to $url$f";   
    git remote set-url origin $url$f;
    git push;
    cd ..;
done;
请注意,我的所有裸存储库的目录名末尾都有*.git

在这个pendrive上有两个文件(如果需要,可以更多)包含了repos的路径 扩展名为*.url的远程计算机(实际上可以是任何内容):

在git URL下的C1和C2上,我有另一个
push all.sh
脚本,但有点简单:

#!/bin/bash
for f in *.git
do
    cd $f;
    git push;
    cd ..;
done;
所以现在,当我完成C1的工作时,我要确保pendrive连接到计算机,并且它已经 与R1配置中的字母相同,我这样做:

$ cd /d/my/path/on/c1/git
$ ./push-all.sh
现在,我所有的工作都从R1复制到p。然后,当我到达计算机R2时,我会:

$ cd /p/git-repo-on-pendrive
$ ./push-all c2
然后我从EGit退出,这里有我所有的更改。当我完成C2的工作时,我会:

$ cd /e/another/path/on/c2
$ ./push-all
当我到达C1时,我会:

$ cd /q/git-repo-on-pendrive
$ ./push-all c1

我确实是从EGit拉过来的。所有这些都解决了我的问题。

我不明白为什么会出现这样的复杂情况:你没有局域网,或者你不能设置连接而不是携带pendrive?这些计算机位于不同的位置(彼此之间大约4公里),它们不共享局域网,并且网络连接有限。事实上,它不是一个选项,因此pendrive.至于
P.pull(R1)
,它意味着获取和合并,但R1和P是裸存储库。
merge
是否适用于此处?对于裸存储库:
R1.push(P)
P.fetch(R1)
之间有什么区别?我可能仍然错过了一些git概念…我认为您也需要合并您的更改,fetch本身不会更新。此外,在
R1.push(P)
P.fetch(R1)
之间没有区别,除了在前者中,
push
必须在
R1
中运行,因此
P
必须是
R1
中的远程,而在后者中,
pull
必须从
P
运行,因此
R1
必须是
P
中的遥控器。感谢您的解释,当我到达另一台计算机并返回到这台计算机时,我会尝试一下。经过一些尝试,我相信
R1.push(P)之间一定有一些功能上的差异
P.fetch(R1)
,但就Git而言,我的知识还不足以抓住这一差异。好吧,当在两个方向上进行推压时,它实际上是起作用的。如果往一个方向推,从另一个方向取,我仍然会遇到问题。可能是由于一些配置问题。但是我准备了一个答案和解决方案,可能对与我类似的人有用。@Cromax我刚刚意识到我的打字错误花费了你大量的调试工作-我在前面的评论中是指
P.pull(R1)
,而不是