相关疑难解决方法(0)

如何从流程输出中删除换行符?

我调用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)

但是返回的字符串中有一个尾随换行符.我不知道如何摆脱它.

elisp

14
推荐指数
3
解决办法
3365
查看次数

使用git ls-files列出来自root而不是当前工作目录的文件

我正在寻找类似于以下的命令,但它始终从存储库根目录而不是当前工作目录中列出:

git ls-files --cached --others --exclude-standard
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我宁愿不使用bash/batch,因为我正在寻找一个跨平台的解决方案.

git

11
推荐指数
2
解决办法
979
查看次数

当我在子目录中时,如何在整个树中git grep?

通常,当我发出时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 grep

9
推荐指数
2
解决办法
1958
查看次数

git的存储库根路径的语法是什么?

使用时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")

git

9
推荐指数
1
解决办法
2007
查看次数

源bash脚本到另一个

可能重复:
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)

因此,我有:

  1. search.sh脚本对<git_root>目录的相对路径

我想要的是:能够test.sh从内部任何地方运行<git_root>而不会出错.

PS:无法使用永久绝对路径,search.sh因为git存储库可以克隆到任何位置.

bash shell

6
推荐指数
1
解决办法
5090
查看次数

脚本获取git工作目录root?

可能重复:
有没有办法在一个命令中获取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工作根的绝对路径.

linux git bash

3
推荐指数
1
解决办法
2369
查看次数

项目根目录的第N个子目录中的bash脚本如何可靠地知道项目根目录的绝对路径?

注意:我非常努力地确保这不是重复的,并且没有问过这个问题bash。据我所知,它不是重复的。

因为我对这样做的所有方式都感兴趣,并且由于git我的 OP 中强调这是一个回购,所以我不会要求答案仅使用 SHELL BUILTIN 命令,但会优先考虑仅使用的答案shell 内置函数。

我在问题中包含的脚本是我使用纯 shell 脚本回答问题的最佳尝试。

语境

我有一个目录结构复杂的大型 bash 项目。让我们bash先把我为什么选择的问题放在一边,而不是像python.

git用于对项目进行版本控制,该项目应该能够在用户空间的任何位置分发和安装并正常运行。因此,我有以下要求:

要求

  1. 我希望能够将各种脚本移动到不同的目录中,而不会破坏或改变它们的运行方式。在这种情况下,可以修改脚本的执行方式(例如,通过使用其他脚本中正确的更新路径),但是在将脚本移动到新目录后,不必重写脚本的内部结构,以确保它继续工作。

  2. 我希望每个脚本都source来自vars.sh项目根目录中的一个文件中的重要变量,这样如果我决定更改项目的目录结构,我就不必在每个脚本中编辑这些变量。因此,每个脚本都需要知道项目根目录在哪里。

此类变量的示例:包含项目内目录config绝对路径或目录绝对路径等的变量tmp)。这是确定要重新写vars.sh,如果目录结构被改变,当然,本身。但我们的想法是需要重写vars.sh(如果脚本被移动,则适当地调用脚本)。

假设

  1. 我在用git,“项目根”可以定义为git的项目树根,即有目录的.git目录。
  2. 在脚本中,任何脚本都不需要被告知它有多少个子目录。

讨论和提议的解决方案

据我所知,要求2任何脚本source变量和/或函数本身都需要回答这篇文章的主要问题。根据我的经验,source使用相对路径名的命令,例如

source "../../vars.sh"
Run Code Online (Sandbox Code Playgroud)

产生一个错误“没有这样的文件或目录”bash,并侵犯了我的假设2和要求1

请注意,DIR通过查找脚本目录的绝对路径创建的变量,使用

DIR="$( cd …
Run Code Online (Sandbox Code Playgroud)

git directory bash shell

2
推荐指数
1
解决办法
181
查看次数

git clone的目标目录是否必须与repo名称匹配?

换句话说,我在Github上有一个名为st3_packages(https://github.com/pitosalas/st3_packages)的回购.

我想做一个git clone并让它在我的本地计算机上创建一个名为" Packages" 的目录.
那可能吗?

git github

1
推荐指数
1
解决办法
1413
查看次数

标签 统计

git ×6

bash ×3

shell ×2

directory ×1

elisp ×1

github ×1

grep ×1

linux ×1