如何用magit emacs更改回购?

时间:2014-02-21 10:34:24

标签: git emacs magit

我需要使用一些不同的git存储库。如何使用magit在它们之间切换? Magit允许我在刚开始时选择一个目录..但是如果需要的话,我不清楚如何切换到另一个仓库。我看过magit cheatsheet和docs,但还没有找到答案。感谢。

5 个答案:

答案 0 :(得分:12)

您可以使用prefix-arg( C-u )调用magit-status,它会提示您输入git存储库。因此,如果magit-status的键绑定是 Cx g ,则可以执行 Cu Cx g ,它会提示git repo。

您还可以将变量magit-repo-dirs设置为目录(执行 Ch f magit-repo-dirs RET 以了解更多)它将提示您magit-repo-dirs中的所有git存储库。

如果您使用射弹,您可以使用它记住您的项目目录并使用它填充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获取(projectile-relevant-known-projects)已知的项目列表,迭代它们并将具有.git/文件夹的项目添加到magit-repo-dirs,它还设置magit-repo-dirs-depth }到1所以magit只在顶级目录中查找git repos。

答案 1 :(得分:5)

我发现如果你使用射弹,最简单的方法就是设置以下内容:

(setq projectile-switch-project-action 'projectile-vc)

现在您可以使用C-p p sprojectile-switch-project),然后会立即致电projectile-vc,如果您有magit安装只需在项目根目录中调用magit-status。简单!

答案 2 :(得分:3)

John Wiegley提供了一个名为“Springboard”的精美软件包,可能对您有用。

https://github.com/jwiegley/springboard

它取决于helm和/或ido,它允许您根据可能位于活动缓冲区中当前文件的不同目录中的文件执行任意命令。以非冗长的方式说明它有点困难(README解释得很好),但只是以你的问题为例:

  • 假设您正在处理作为git repo一部分的文件1.el 但是您希望为magit-status单独的文件运行2.el 在另一个回购中。

  • M-x springboard使用helmido-switch-buffer ido使用2.el 为您提供候选文件列表。

  • 通过关注2.el(但不选择它),您可以调用
    任意命令,就像你在该文件中工作一样 。目录

  • 因此,如果您专注于magit-status,然后再致电magit-status 候选人名单,你会得到正常的2.el窗口 对于与文件1.el关联的repo,然后是您 已完成工作你可以退出magit和springboard 将是活动缓冲区,一切都将像调用{{1}}之前一样。

非常有用。

答案 3 :(得分:0)

Magit在执行magit-status时会使用当前缓冲区的当前工作目录。

所以:

  1. 关闭magit当前缓冲区(如果有)( A B C D ------ ---------- --- ---------- 1 1 NO 200 1 2 NO 100 1 3 YES 200 1 4 NO 100 1 5 YES 100
  2. 将目录更改为包含您的仓库({ "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "vuejs: chrome", "url": "http://localhost:8080", "webRoot": "${workspaceFolder}/client/src", "breakOnLoad": true, "sourceMapPathOverrides": { "webpack:///*": "${webRoot}/*", "webpack:///./*": "${webRoot}/*", "webpack://./src/*": "${webRoot}/*" } } ] } )的目录
  3. 再次启动magit(q

答案 4 :(得分:0)

更新接受的答案,这是Emacs 25中对我有用的代码。出于某种原因,remove-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)))