使用Git时,如何避免代码中的绝对路径名?

时间:2015-11-13 20:31:54

标签: repository relative-path absolute-path

到目前为止,在我的编程生涯中,我主要从事小型项目,直接在Linux开发主机上编辑PHP / Perl / Python文件,然后将文件复制到实时服务器上的同一目录中以推送它们投入生产。

我正在尝试通过学习如何使用Git来设置它,以及如何正确地编写代码与Git。我想学习这种情况的最佳实践:

这是一个名为“BigFun”的项目,该项目还使用了一些具有许多项目通用任务的库。

/home/projects/BigFun/bin/script1.pl
/home/projects/BigFun/bin/script2.pl
/home/projects/BigFun/bin/script3.pl
/home/projects/BigFun/lib/FunMaker.pm

/home/projects/common/lib/Utilities.pm
/home/projects/common/lib/Format.pm

如果这个程序不是由Git管理的,如果我知道文件永远不会被移动,我可以这样做:

#!/usr/bin/perl
use warnings;
use strict;
use lib '/home/projects/BigFun/lib';
use FunMaker;
use lib '/home/projects/common/lib';
use Utilities;

但是一旦这个由Git管理,那么任何人都可以检查这些文件并将它们放在自己的开发空间中。如果您的开发rootdir是“C:\ My Projects \ BigFun”,则硬编码的URL将不再有效。

所以,有些问题:

  1. 我可以假设BigFun“lib”目录总是相对于“bin”目录。所以也许我可以将第3行更改为use lib '../lib';。这是正确的解决方案吗?

  2. 但是,我列出的这个示例代码似乎可能会分成两个存储库 - 一个用于BigFun,另一个用于包含“常用”存储库许多项目使用的一些工具。当发生这种情况时,在我看来,BigFun代码无法知道在哪里可以找到“常见”库。 /home/projects/common/lib完全无法保证工作,../../common/lib也不会。 Git处理这类事情的正常方法是什么?

  3. 我正在通过“Pro Git”这本书,但我还没有找到任何回答这些问题的方法。感谢任何能指出我正确方向的人!

1 个答案:

答案 0 :(得分:2)

你的问题不是关于Git, 它是关于合作的。 绝对路径强制您的软件的所有用户使用相同的目录布局,这是不可接受的。没有像样的软件那样做。 避免软件中的绝对路径是标准, 无论您使用什么版本控制系统,或不使用。

如何使用严格的相对路径而不是绝对路径使您的软件工作?这取决于软件/框架/语言。 对于有意义的相对路径, 你需要考虑这个问题:相对于哪里? 以下是 anchor 的一些想法,可以从中考虑相对路径:

  • 当前工作目录
  • 用户主目录
  • 包安装目录
  • 框架安装目录

每种语言通常都有一些包装机制。 打包的目标是该语言的开发人员可以创建一个标准包,其内容的组织方式使得该语言的标准工具可以安装它, 将软件添加到系统范围的语言库中, 或自定义用户库, 或指定的库位置。 从标准软件包安装软件后, 它就像任何其他已安装的软件一样可以使用。

在你的例子中, use warnings;use strict;无需任何设置即可正常工作,因为这些库已安装在系统中。 系统找到它们相对于Perl安装目录的位置。粗略地说。

所以你需要做的是:

  1. 了解如何打包Perl库
  2. 了解如何安装Perl软件包
  3. FunMakerUtilities作为标准Perl软件包安装后,您将能够将脚本简化为:

    #!/usr/bin/perl
    use warnings;
    use strict;
    use FunMaker;
    use Utilities;
    

    您当然必须记录脚本的依赖关系(FunMakerUtilities), 以及如何安装它们(特别是托管这些包的位置)。