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

乔治·亚当斯

到目前为止,在我的编程生涯中,我主要从事小型项目,直接在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管理,则任何人都可以检出这些文件并将它们放在自己的开发空间中。如果您的开发根目录为“ C:\ My Projects \ BigFun”,则硬编码的URL将不再起作用。

因此,一些问题:

  1. 我大概可以假设BigFun的“ lib”目录将始终相对于“ bin”目录。因此,也许我可以将第3行更改为use lib '../lib';那是正确的解决方案吗?

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

我正在研究《 Pro Git》一书,但还没有找到任何答案。感谢任何能为我指出正确方向的人!

亚诺斯

您的问题不是关于Git的,而是关于协作的。绝对路径会强制您的软件的所有用户使用相同的目录布局,这是不可接受的。没有像样的软件可以做到这一点。避免使用软件中绝对路径是规范,无论您使用或不使用哪个版本控制系统。

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

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

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

在你的榜样,use warnings;并且use strict;无需任何设置工作,因为这些库安装在系统中。系统会找到它们相对于Perl安装目录的位置。大致说来。

因此,您需要做的是:

  1. 弄清楚如何打包Perl库
  2. 弄清楚如何安装Perl软件包

FunMakerUtilities安装为标准Perl软件包后,您将能够简化脚本,如下所示:

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

当然,您将必须记录脚本的依赖项(FunMakerUtilities)以及如何安装它们(尤其是这些程序包的托管位置)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何抑制FindBugs警告(对绝对路径名的硬编码引用)?

如何在Java中获取文件的绝对路径

jar清单中的绝对路径名和相对路径名

Browserify –避免输出绝对路径

git grep显示绝对路径

使用baseUrl导入模块时,如何使tsc解析绝对路径?

如何在Git Bash中找出Vim的绝对路径?

如何使用JavaFX从树形视图的绝对路径中获取文件夹或文件名?

如何确定调用者的编译单元的绝对路径名?

如何在Create React App项目中避免很长的路径并使用绝对路径?

如何在PowerShell中基于相对路径或绝对路径获取绝对路径?

如何创建一个目录,它只能通过其绝对路径名访问而看不到?

如何在bash提示中显示绝对路径?

为什么getfacl从绝对路径名中删除前导/?

如何在unix中使用expr从存储在变量中的文件的绝对路径名中提取父目录?

使用绝对路径时,如何修复cygwin中的Windows 8 Anaconda“无法打开文件”错误?

如何使git difftool始终导出绝对路径

当参数是绝对路径名时,File :: Basename :: dirname是否总是返回父目录或根目录吗?

引导期间出现“文件名必须是绝对路径名或阻止列表”的错误

根目录如何用于解析绝对路径名?

rsync`的--link-dest是否仅采用绝对路径名?

RequireJS:在指定配置中存在路径别名的绝对路径名时,不触发需求回调

使用React + Webpack时如何使用绝对路径导入自定义scss?

如何获取在git commit中已更改但具有绝对路径的文件的列表?

在Wine下运行的Windows程序是否无法识别其参数的绝对路径名?

拷贝文件时如何获取拷贝的绝对路径?

如何使用正则表达式从绝对路径中提取文件名

有没有一种方法可以让我不必为编码时使用的任何文件提供绝对路径名?

重构代码以不使用绝对路径或 URI