我调用git获取toplevel目录(根据 有没有办法在一个命令中获取git根目录? ).
(let ((tmpbuffer (get-buffer-create (make-temp-name "git"))))
(call-process "git" nil tmpbuffer nil "rev-parse" "--show-toplevel")
(with-current-buffer tmpbuffer
(with-output-to-string
(princ (buffer-string))
(kill-buffer))))
Run Code Online (Sandbox Code Playgroud)
但是返回的字符串中有一个尾随换行符.我不知道如何摆脱它.
我正在寻找类似于以下的命令,但它始终从存储库根目录而不是当前工作目录中列出:
git ls-files --cached --others --exclude-standard
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我宁愿不使用bash/batch,因为我正在寻找一个跨平台的解决方案.
通常,当我发出时git grep,它只会搜索当前目录及其下方
$ cat A
1
$ cd d
$ cat B
1
$ git grep 1
B:1
$ cd ..;git grep 1
A:1
B:1
Run Code Online (Sandbox Code Playgroud)
如何判断git grep"搜索整个树,无论我当前的工作目录是什么"?
使用时git add -u我可以提供一个路径作为最后一个参数,例如git add -u ..如何给出存储库根路径?
我想使用它来快速将所有跟踪文件的更改添加到索引中,包括更改目录树中的文件.
例
$ git status # On branch mul # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: ../../../foo.mwb # no changes added to commit (use "git add" and/or "git commit -a")
可能重复:
bash脚本获取自身完整路径的可靠方式?
我有bash脚本test.sh,它search.sh通过以下行使用来自另一个脚本的函数:
source ../scripts/search.sh
<call some functions from search.sh>
Run Code Online (Sandbox Code Playgroud)
这两个脚本都位于git存储库中.search.sh在<git_root>/scripts/目录中,test.sh位于同一目录中(但是,一般来说,可以位于<git_root>目录内的任何位置- 我的意思是我不能依赖于以下source search.sh方法).
当我test.sh从<git_root>/scripts/一切调用脚本运行良好,但一旦我更改当前工作目录test.sh失败:
cd <git_root>/scripts/
./test.sh //OK
cd ..
./scripts/test.sh //FAILS
./scripts/test.sh: line 1: ../scripts/search.sh: No file or directory ...
Run Code Online (Sandbox Code Playgroud)
因此,我有:
search.sh脚本对<git_root>目录的相对路径我想要的是:能够test.sh从内部任何地方运行<git_root>而不会出错.
PS:无法使用永久绝对路径,search.sh因为git存储库可以克隆到任何位置.
可能重复:
有没有办法在一个命令中获取git根目录?
我正在编写一个bash脚本(实际上是一个Makefile),需要使用一个参数,该参数是一个相对于包含当前目录的git工作目录的根目录.
那是:
/home/me$ git clone /abc/foo.git
directory foo created
/home/me$ cd foo/bar
/home/me/foo/bar$ execute_script.sh
hello /home/me/foo/baz
Run Code Online (Sandbox Code Playgroud)
execute_script.sh如下:
echo hello `git something`/baz
Run Code Online (Sandbox Code Playgroud)
什么是git?它应该返回当前git工作根的绝对路径.
注意:我非常努力地确保这不是重复的,并且没有问过这个问题bash。据我所知,它不是重复的。
因为我对这样做的所有方式都感兴趣,并且由于git我的 OP 中强调这是一个回购,所以我不会要求答案仅使用 SHELL BUILTIN 命令,但会优先考虑仅使用的答案shell 内置函数。
我在问题中包含的脚本是我使用纯 shell 脚本回答问题的最佳尝试。
我有一个目录结构复杂的大型 bash 项目。让我们bash先把我为什么选择的问题放在一边,而不是像python.
我git用于对项目进行版本控制,该项目应该能够在用户空间的任何位置分发和安装并正常运行。因此,我有以下要求:
我希望能够将各种脚本移动到不同的目录中,而不会破坏或改变它们的运行方式。在这种情况下,可以修改脚本的执行方式(例如,通过使用其他脚本中正确的更新路径),但是在将脚本移动到新目录后,不必重写脚本的内部结构,以确保它继续工作。
我希望每个脚本都source来自vars.sh项目根目录中的一个文件中的重要变量,这样如果我决定更改项目的目录结构,我就不必在每个脚本中编辑这些变量。因此,每个脚本都需要知道项目根目录在哪里。
此类变量的示例:包含项目内目录config绝对路径或目录绝对路径等的变量tmp)。这将是确定要重新写vars.sh,如果目录结构被改变,当然,本身。但我们的想法是只需要重写vars.sh(如果脚本被移动,则适当地调用脚本)。
git,“项目根”可以定义为git的项目树根,即有目录的.git目录。据我所知,要求2任何脚本source变量和/或函数本身都需要回答这篇文章的主要问题。根据我的经验,source使用相对路径名的命令,例如
source "../../vars.sh"
Run Code Online (Sandbox Code Playgroud)
产生一个错误“没有这样的文件或目录”中bash,并侵犯了我的假设2和要求1。
请注意,DIR通过查找脚本目录的绝对路径创建的变量,使用
DIR="$( cd …Run Code Online (Sandbox Code Playgroud) 换句话说,我在Github上有一个名为st3_packages(https://github.com/pitosalas/st3_packages)的回购.
我想做一个git clone并让它在我的本地计算机上创建一个名为" Packages" 的目录.
那可能吗?