IntelliJ的Shelve和Git藏匿有什么区别?

Dan*_*ton 85 git intellij-idea git-stash

IntelliJ支持git stashes以及它自己的内置shelve命令.这些似乎在目的和效用上几乎相同.他们之间有什么区别?

Dan*_*ton 59

从IntelliJ 文档:

在Git集成中,除了搁置和搁置之外,还分别支持"存储"和"取消存储".这些功能有很多共同点,唯一的区别在于生成和应用补丁的方式.

  • 具有隐藏更改的修补程序由Git本身生成.要在以后应用它们,您不需要IntelliJ IDEA.
  • IntelliJ IDEA生成带有搁置更改的修补程序.通常,它们也通过IDE应用.在IntelliJ IDEA之外应用搁置的更改也是可能的,但需要额外的步骤.

  • 那么,搁架有什么好处,因为它与普通的git"兼容性差"很小? (19认同)
  • 如果您使用没有本机存储样式功能的VCS,那么搁架似乎很有用.如果你使用git,我看不到任何真正的好处. (15认同)
  • id.bobr 在答案中列出了“真正的好处”。对我来说最重要的是能够选择要存储的文件/块,就像提交时一样。 (8认同)
  • 从 Git 2.13 开始,可以使用 `git stash push` 来存储单个文件。 (2认同)

小智 35

它们很相似,除了:

  • 你不能在IDE之外使用搁置,因为它是Intellij的功能.
  • Git stash仅适用于整个工作目录和索引.IntelliJ的搁置可以使用单个文件和更改列表(另一个IntelliJ的功能).正如你所看到的,例如,在这里,有时是必要的.
  • Idea有更好的内置支持搁置.使用git stash更简单.特别是,您可以搁置\取消搁置您的更改或从版本控制工具窗口查看搁置的文件.

此外,恕我直言,搁置工作稍微快一点,特别是在一个大项目,当大量的文件被更改.

有关详细信息,请参阅文档.

  • “Git stash 仅适用于整个工作目录和索引” - 这是错误的。Git stash 也可以存储单个文件和文件夹 - 例如:`git stash -- foo/bar.txt` (9认同)

riy*_*iya 14

Intellij的Shelve比普通Git存储的一个明显优势是使用Shelve,您可以将属于多个repos的更改保存在一个更改列表中.使用stash,您需要单独存储/取消存储每个repo.这在具有多个模块(每个模块都有自己的存储库)的大型项目中非常有用,其中特定功能工作可以跨多个模块(因此多个存储库)