本地 git 函数

Local git functions

我想出了如何使用主文件夹中的 .bashrc 文件为 git bash 加载函数以在 windows 中加载(解决方法是.bash_profile):

# Example
function cush() {
    git add Figures/;
    git commit -am "";   # Parse string to git
    git push;
}

但是这个函数是专用于 LaTeX 的,我实际上只需要在特定类型的存储库中使用它。 所以我的问题是是否有一种方法可以在本地创建函数,这样它就会在加载 git bash 时加载到该特定文件夹中? 这激发了特定于存储库的功能,就像 .gitignore is.

This question 可能会有帮助。我尝试了这个解决方案,它可以在我的 Ubuntu15.x 和 git 版本 2.8.2 中工作,而其他版本有错误。

[alias] cush = !git add . && git commit -m  && git push && :

因此您可以将此别名添加到本地配置和 运行 git cush <message>

通常,您不必担心定义了不必要的函数,除非您想对不同的、上下文相关的函数使用相同的名称。 bash 不直接提供在工作目录更改时执行代码的挂钩,但是您可以(ab)使用 PROMPT_COMMAND 来根据 $PWD 的值有条件地执行代码,每次显示新提示。

  1. 创建名为 .bash-functions
  2. 的目录
  3. 将您的 LaTex 特定函数放入 .bash-functions/latex
  4. 创建一个文件.bash-functions/un-latex,其中包含用于取消设置 LaTeX 特定函数的代码,例如

    unset -f cush
    
  5. 将以下内容添加到您的.bashrc

    source_local_functions () {
        source ./bash-functions/un-latex
        if [[ $PWD == foo ]]; then
            source ./bash-functions/latex
        fi
    }
    PROMPT_COMMAND=source_local_functions
    

现在,每次显示新提示时,bash 将取消设置您的 LaTex 特定功能,然后如果您位于名为 foo 的目录中,则重新设置它们(您显然可以调整此测试对于应该使用 LaTeX 函数的真实目录)。

如果您要定义其他特定于目录的函数,这会变得很笨拙,因为您需要跟踪每次更改目录时要取消设置的函数以及要设置的函数。