简短的说:有没有办法将git repo推送到远程仓库(而不是单个“来源”)列表并从中提取?
漫长的时候:当我在多台计算机上开发具有不同连接性的应用程序时经常遇到这种情况–例如在运输中的便携式计算机,在特定位置的计算机“ A”和另一台计算机“ B”而在另一个。此外,笔记本电脑可能仅与“ A”或“ B”(有时有时两者)具有连接。
我想让git始终从其当前可以连接的所有计算机“拉”和“推”到它,因此从一台机器跳到另一台机器并继续无缝地工作更容易。
简短的说:有没有办法将git repo推送到远程仓库(而不是单个“来源”)列表并从中提取?
漫长的时候:当我在多台计算机上开发具有不同连接性的应用程序时经常遇到这种情况–例如在运输中的便携式计算机,在特定位置的计算机“ A”和另一台计算机“ B”而在另一个。此外,笔记本电脑可能仅与“ A”或“ B”(有时有时两者)具有连接。
我想让git始终从其当前可以连接的所有计算机“拉”和“推”到它,因此从一台机器跳到另一台机器并继续无缝地工作更容易。
Answers:
您可以使用以下git remote
命令配置多个远程存储库:
git remote add alt alt-machine:/path/to/repo
要从所有已配置的遥控器获取并更新跟踪分支,但不合并到中HEAD
,请执行以下操作:
git remote update
如果当前未连接到任何一个遥控器,它将花费一些时间或抛出错误,然后继续下一个。您必须从获取的存储库或中手动进行合并cherry-pick
,具体取决于您希望如何组织收集更改。
要从alt获取master分支并将其拉入当前的头部,请执行以下操作:
git pull alt master
所以实际上git pull
几乎是简写git pull origin HEAD
(实际上,它会在配置文件中确定以确定它,但是您知道了)。
对于推送更新,您必须手动对每个存储库执行此操作。
我认为,在设计推送时要考虑到中央存储库的工作流程。
对于现代版本的,不再需要手动执行此操作git
!看到下面的 Malvineous解决方案。
转载于此:
git remote set-url origin --push --add <a remote>
git remote set-url origin --push --add <another remote>
我已经使用了很长一段时间,并且没有不良后果,这是git邮件列表中的 Linus Torvalds建议的。
araqnid的解决方案是引入代码的合适解决方案引入您的存储库 ……但是当您像我一样拥有多个等效的权威上游时(我将一些更重要的项目克隆到了私有上游,GitHub和Codaset中),每天都要对每个更改进行更改可能会很痛苦。
长话短说,git remote add
您的所有遥控器都是单独的…然后git config -e
添加一个合并的遥控器。假设您有此存储库config
:
[remote "GitHub"]
url = git@github.com:elliottcable/Paws.o.git
fetch = +refs/heads/*:refs/remotes/GitHub/*
[branch "Master"]
remote = GitHub
merge = refs/heads/Master
[remote "Codaset"]
url = git@codaset.com:elliottcable/paws-o.git
fetch = +refs/heads/*:refs/remotes/Codaset/*
[remote "Paws"]
url = git@github.com:Paws/Paws.o.git
fetch = +refs/heads/*:refs/remotes/Paws/*
...创建一个融合远程的"Paws"
和"Codaset"
,我可以添加后所有的以下内容:
[remote "Origin"]
url = git@github.com:Paws/Paws.o.git
url = git@codaset.com:elliottcable/paws-o.git
一旦我做到了这一点,当我git push Origin Master
,这将推动双方Paws/Master
和Codaset/Master
顺序,使生活变得更轻松。
git config -e
.git/config
在您的首选编辑器中打开文件。
git
的命令行使用本身就支持git remote set-url ... --add
。
[branch "Master"]
设置remote = Origin
,git pull
将使用两个遥控器。
从git 1.8(2012年10月)开始,您可以从命令行执行此操作:
git remote set-url origin --push --add user1@repo1
git remote set-url origin --push --add user2@repo2
git remote -v
然后git push
将推送到user1 @ repo1,然后推送到user2 @ repo2。
git fetch
。(鉴于此,我不明白的目的是什么git remote set-url --add
可以没有--push
。)
我将这些别名添加到了〜/ .bashrc中:
alias pushall='for i in `git remote`; do git push $i; done;'
alias pullall='for i in `git remote`; do git pull $i; done;'
git config alias.pushall '!for i in
git remote; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
我在.git congfig文件的远程“源”中添加了两个单独的pushurl。当我运行时git push origin "branchName"
,它将运行并推送到每个URL。不知道是否有更简单的方法可以完成此操作,但这对我自己有用,可以同时推送到Github源代码和同时推送到My.visualStudio源代码。
[remote "origin"]
url = "Main Repo URL"
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = "repo1 URL"
pushurl = "reop2 URl"
我自由地扩大了nona-urbiz 的答案;只需将其添加到您的〜/ .bashrc中即可:
git-pullall () { for RMT in $(git remote); do git pull -v $RMT $1; done; }
alias git-pullall=git-pullall
git-pushall () { for RMT in $(git remote); do git push -v $RMT $1; done; }
alias git-pushall=git-pushall
用法:
git-pullall master
git-pushall master ## or
git-pushall
如果您不为git-pullall提供任何分支参数,那么从非默认远程服务器的拉取将失败;保留此行为,因为它类似于git。
您将需要一个脚本来遍历它们。Git没有提供“全部推送”功能。从理论上讲,您可以在多个线程中进行推送,但是本机方法不可用。
提取更为复杂,建议线性进行。
我认为,最好的答案是让所有人都有一次推/拉的机器,如果可能的话。
为了更新遥控器(例如,pull
机箱),事情变得更容易了。
莱纳斯的声明
可悲的是,甚至没有任何方法可以用git别名来伪造它。
在该引用的条目Git的邮件列表中elliottcable的回答不再是真实的。
git fetch
--all
在过去的某个地方了解到该参数,从而可以一次性获取所有遥控器。
如果没有全部请求,则可以使用该--multiple
开关来指定多个遥控器或一组。
我想在VSO / TFS中工作,然后在准备好时将其公开发布到GitHub。在私有VSO中创建的初始回购。当添加到GitHub的时候,我做了:
git remote add mygithubrepo https://github.com/jhealy/kinect2.git
git push -f mygithubrepo master
像冠军一样工作...
为了进行健全性检查,请发出“ git remote -v”以列出与项目关联的存储库。
C:\dev\kinect\vso-repo-k2work\FaceNSkinWPF>git remote -v
githubrepo https://github.com/jhealy/kinect2.git (fetch)
githubrepo https://github.com/jhealy/kinect2.git (push)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (fetch)
origin https://devfish.visualstudio.com/DefaultCollection/_git/Kinect2Work (push)
简单的方法,为我工作...希望这对某人有帮助。
git push -f
无缘无故地奔跑,例如失败git push
或不知道自己在做什么,这是一个坏主意,可能有害。这也没有回答问题,而是如何添加第二个遥控器。
使用以下命令向全局gitconfig(/home/user/.gitconfig)添加一个别名。
git config --global alias.pushall '!f(){ for var in $(git remote show); do echo "pushing to $var"; git push $var; done; }; f'
提交代码后,我们会说
git推
默认情况下推送到原点。经过上面的别名,我们可以说
git pushall
并且代码将更新到所有遥控器,包括原始遥控器。
git
包含受一流功能认可的当前正确方法。接受的答案不正确。