我需要使用几个不同的 git 存储库。如何使用 magit 在它们之间切换?Magit 允许我在启动它时选择一个目录。但我不清楚如果需要如何切换到另一个 repo。我查看了 magit 备忘单和文档,但没有找到答案。谢谢。
5 回答
您可以magit-status
使用 prefix-arg ( C-u) 调用,它会提示您输入 git 存储库。因此,如果你为magit-status
is绑定键C-xg,你可以这样做C-uC-xg,它会提示输入 git repo。
您还可以将变量设置magit-repo-dirs
为目录(C-hfmagit-repo-dirs
RET了解更多信息),它会提示您在magit-repo-dirs
.
如果您使用 projectile,您可以使用它记住您的项目目录并使用它填充的事实magit-repo-dirs
,我在我的 init 文件中有这个来实现这一点
(eval-after-load "projectile"
'(progn (setq magit-repo-dirs (mapcar (lambda (dir)
(substring dir 0 -1))
(remove-if-not (lambda (project)
(file-directory-p (concat project "/.git/")))
(projectile-relevant-known-projects))))
(setq magit-repo-dirs-depth 1)))
上面的代码在projectile
加载后执行。projectile
它通过do获取已知的项目列表(projectile-relevant-known-projects)
,遍历它们并将具有.git/
文件夹的项目添加到magit-repo-dirs
,它也设置magit-repo-dirs-depth
为 1,因此 magit 仅在顶级目录中查找 git repos。
我发现如果你使用弹丸,最简单的就是设置以下内容:
(setq projectile-switch-project-action 'projectile-vc)
现在您可以使用C-p
p
s
( projectile-switch-project
) ,然后它会立即调用projectile-vc
,如果您已magit
安装,则只需magit-status
在项目根目录中调用。简单的!
John Wiegley 有一个很好的包,叫做“Springboard”,它可能对你有用。
https://github.com/jwiegley/springboard
它取决于helm
and/or ido
,它允许您根据可能位于与当前活动缓冲区中的任何文件不同的目录中的文件执行任意命令。以非冗长的方式说明它有点困难(自述文件很好地解释了它),但只是以您的问题为例:
假设您正在处理一个
1.el
属于 git repo 的文件,但您想运行magit-status
一个单独的文件2.el
,该文件完全位于另一个 repo 中。使用
M-x springboard
forhelm
或ido-switch-buffer
forido
为您提供候选文件列表。通过关注
2.el
(但不选择它),您可以调用
任意命令,就好像您在该文件的目录中工作一样。因此,如果您要专注于
2.el
然后magit-status
从候选列表中调用,您将获得magit-status
与文件关联的 repo 的正常窗口,2.el
然后一旦完成处理,您就可以退出 magit1.el
并将成为活动缓冲区和一切都会像以前一样springboard
被调用。
它非常有用。
执行 magit-status 时,Magit 使用当前缓冲区的当前工作目录。如果其他答案失败,这是低效但始终有效的替代方案:
- 关闭 magit 当前缓冲区(如果有) (
q
) - 将目录更改为包含您的 repo (
M-x cd
)的目录 - 再次启动 magit (
M-x magit-status
)
(效率低,因为 magit 会重启)
更新已接受的答案,这是在 Emacs 25remove-if-not
中为我工作的代码。由于某种原因,它不是一个已知的函数。
(eval-after-load "projectile"
'(progn (setq magit-repo-dirs (mapcar (lambda (dir)
(substring dir 0 -1))
(seq-remove (lambda (project)
(not (file-directory-p (concat project "/.git/"))))
(projectile-relevant-known-projects))))
(setq magit-repo-dirs-depth 1)))