文档章节

atom分析-项目目录中的git状态显示

subying
 subying
发布于 2016/05/28 14:41
字数 1130
阅读 1662
收藏 1

    最近都在用atom来代替了sublime text来写代码,github强大的开源插件让这个编辑器变得非常的强大而且有个性化,推荐前端开发的朋友都去尝试使用,为什么不是都建议使用呢?因为atom占用的内存比sublime text确实大了很多很多,目前还出现过崩溃的情况。

    这次不是讨论atom的好坏,而是发现了一个问题,atom不能显示git项目的分支。

    用atom的朋友应该都都知道,atom打开了git项目(不需要是github),打开项目的其中一个文件,那么在atom的右下角位置都会显示你项目当前的分支,显示修改了多少行,删除了多少行这样的状态,如下图

但是发现有时候,打开了git项目却没有像上面那样的显示,让我一度怀疑自己的atom已经坏了......

经过试验发现,atom没有我想象中的那么智能吧,这种情况下添加项目文件是没有的

而这样添加项目文件却能够正确显示了,如下

观察可以看出来,这两者的区别在于第一种情况是git项目在添加项目目录的时候是二级目录,而第二种情况则是一级目录,那就是说atom只能识别项目的一级目录?

这个时候应该确认一下atom是如果读取git项目的,那么需要打开atom的调试器(windows下的快捷键是alt+ctrl+i),atom编辑器调试的对象是atom,那么分析它读取的项目是atom.project,往下查看发现有一个读取项目的仓库方法 getRepositories,所以在调试工具里面执行

atom.project.getRepositories

如下图

  如上图点击操作,找到了这个方法的源码,

 Project.prototype.getRepositories = function() {
      return this.repositories;
    };

得知,直接返回的是 repositories 这个属性,那么接着往下找,搜索关键词(ctrl+f) repositories,找到这个相关的设置,发现这么一段代码

 Project.prototype.setPaths = function(projectPaths) {
      var projectPath, repository, _i, _j, _len, _len1, _ref1;
      _ref1 = this.repositories;
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        repository = _ref1[_i];
        if (repository != null) {
          repository.destroy();
        }
      }
      this.rootDirectories = [];
      this.repositories = [];
      for (_j = 0, _len1 = projectPaths.length; _j < _len1; _j++) {
        projectPath = projectPaths[_j];
        this.addPath(projectPath, {
          emitEvent: false
        });
      }
      return this.emitter.emit('did-change-paths', projectPaths);
    };

" this.repositories = []; "这个是初始化设置为空数组,往下的代码就是进行设置各个项目路径,体检路径是在 " this.addPath " 中,所以找到了addPath的方法,如下

 Project.prototype.addPath = function(projectPath, options) {
      var directory, directoryExists, provider, repo, rootDirectory, _i, _j, _k, _len, _len1, _len2, _ref1, _ref2, _ref3;
      directory = null;
      _ref1 = this.directoryProviders;
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        provider = _ref1[_i];
        if (directory = typeof provider.directoryForURISync === "function" ? provider.directoryForURISync(projectPath) : void 0) {
          break;
        }
      }
      if (directory == null) {
        directory = this.defaultDirectoryProvider.directoryForURISync(projectPath);
      }
      directoryExists = directory.existsSync();
      _ref2 = this.getDirectories();
      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
        rootDirectory = _ref2[_j];
        if (rootDirectory.getPath() === directory.getPath()) {
          return;
        }
        if (!directoryExists && rootDirectory.contains(directory.getPath())) {
          return;
        }
      }
      this.rootDirectories.push(directory);
      repo = null;
      _ref3 = this.repositoryProviders;
      for (_k = 0, _len2 = _ref3.length; _k < _len2; _k++) {
        provider = _ref3[_k];
        if (repo = typeof provider.repositoryForDirectorySync === "function" ? provider.repositoryForDirectorySync(directory) : void 0) {
          break;
        }
      }
      this.repositories.push(repo != null ? repo : null);
      if ((options != null ? options.emitEvent : void 0) !== false) {
        return this.emitter.emit('did-change-paths', this.getPaths());
      }
    };

在 "  this.repositories.push  "进行断点,F5重新加载atom,观察,发现如果git项目在二级目录的情况是这样的

而git项目是一级目录的情况是这样的

由此可见,atom确实是只能识别项目的一级目录(如果分析setPaths这个方法也会发现atom实际也是读取一级目录)。当然,这里调试看到的其实是编译后的代码,那么这个文件相关的源码是在  https://github.com/atom/atom/blob/master/src/project.coffee 这里,而atom相关的源码是在 https://github.com/atom/atom/tree/master/src 这里,因为其中还包换了如果读取git项目状态等方法,这里就不讨论了,有兴趣的自个去看看,研究,如果有什么心得就跟大伙分享一下。

另外推荐几个插件:

simplified-chinese-menu -- 简体中文汉化包(像我这样不懂英文的人必备)。

file-icons --非常漂亮的文件图标扩展,当你往项目目录一看的时候,简直不能再爽了。

atom-beautify --不为啥,就为了格式化代码,必备。

language-babel --这个是跟babel相关的,写es6 react必备的插件。

另外想说的,想我这样菜鸟的朋友,遇到问题认真分析,总可以找到你要的答案。

© 著作权归作者所有

subying
粉丝 21
博文 65
码字总数 35859
作品 0
广州
前端工程师
私信 提问
Atom 1.37.0 beta 1 发布,跨平台文本编辑器

Atom 1.37.0 beta 1 发布了,Atom 是 GitHub 专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持 CSS、HTML 与 JavaScript 等网页编程语言,...

xplanet
04/27
497
1
Atom 1.26 和 Atom 1.27 beta发布:提供更多的改进功能

导读 GitHub宣布推出用于Linux、macOS和Windows平台的Atom 1.26开源和跨平台可文本编辑器,并进行了更多改进和错误修复。 在Atom 1.26中,GitHub包得到了各种改进和新功能,Git窗格显示最近提...

linuxprobe16
2018/04/30
17
0
如何发布一个Atom的package

原文是写在简书上面的, 我现在搬过来了,这边更新会稍慢点。 http://www.jianshu.com/p/98f99c20493c 上次为大家介绍了package.json的内容,文件在nodejs是非常有用的,发布npm是必须使用的...

乖小鬼YQ
2017/11/29
0
0
Atom 1.35.0 发布,升级 Electron,修复 Chrome 漏洞

Atom 1.35.0 发布了,Atom 是 GitHub 专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,并有很多有趣的特点:支持 CSS、HTML 与 JavaScript 等网页编程语言,支持宏、...

h4cd
03/12
1K
5
VS Code上手与超实用插件安利

原文链接:VS Code上手与超实用插件安利 工欲善其事必先利其器 Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、...

流口水流
2017/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
11
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
8
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
11
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部