Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 验证其相应分支上是否存在多个目录_Linux_Git_Makefile_Directory_Branch - Fatal编程技术网

Linux 验证其相应分支上是否存在多个目录

Linux 验证其相应分支上是否存在多个目录,linux,git,makefile,directory,branch,Linux,Git,Makefile,Directory,Branch,我需要创建一个新的Makefile来源于主Makefile,然后使用其中定义的变量来检查目录是否存在于它们相应的本地分支中。我读过很多关于StackOverflow的帖子,都是关于检查目录是否存在的,但是我一直在研究如何找出它们是否在适当的分支中 #!bin/ksh DIRLOC=/var/tmp DIRNAMES="SchemaExtract SQL Count SchExtArchive" for DIRNAME in ${DIRNAMES} do if [ -d ${DIRLOC}/${D

我需要创建一个新的Makefile来源于主Makefile,然后使用其中定义的变量来检查目录是否存在于它们相应的本地分支中。我读过很多关于StackOverflow的帖子,都是关于检查目录是否存在的,但是我一直在研究如何找出它们是否在适当的分支中

#!bin/ksh
DIRLOC=/var/tmp
DIRNAMES="SchemaExtract SQL Count SchExtArchive"
for DIRNAME in ${DIRNAMES}
do
if [ -d ${DIRLOC}/${DIRNAME} ]
then
    echo ${DIRLOC}/${DIRNAME} already exists
else
    echo ${DIRLOC}/${DIRNAME} Creating ...
    mkdir ${DIRLOC}/${DIRNAME}
    chmod 755 ${DIRLOC}/${DIRNAME}
fi
done
任何帮助都将不胜感激

澄清-
我想在我的新Makefile中指定每个目录应该在哪个git分支中。所以我需要一个代码从主Makefile读取目录,检查它们是否存在,如果存在,将找到的目录位置与我在新Makefile中指定的位置进行比较,以确定所有内容都在其正确的git分支中。

您可以使用
git ls tree
命令检查给定分支中是否存在目录

作为一个例子,考虑下面的知识库:

# There are 3 branches.
$ git branch
  branch1
  branch2
* master

# master contains master_dir
$ ls
master_dir

# branch1 contains master_dir and branch1_dir
$ git checkout branch1
Switched to branch 'branch1'
$ ls
branch1_dir  master_dir

# branch2 contains master_dir and branch2_dir
$ git checkout branch2
Switched to branch 'branch2'
$ ls
branch2_dir  master_dir

# switch back to the master branch
$ git checkout master
Switched to branch 'master'
$ ls
master_dir
以下命令从主分支运行

对于branch1:

$ git ls-tree -d branch1:branch1_dir
$ git ls-tree -d branch1:branch2_dir
fatal: Not a valid object name branch1:branch2_dir
对于branch2:

$ git ls-tree -d branch2:branch2_dir
$ git ls-tree -d branch2:branch1_dir
fatal: Not a valid object name branch2:branch1_dir
在shell脚本中,可以在条件中使用命令的返回值:

$ git ls-tree -d branch1:branch1_dir 2&> /dev/null; \
> if [[ $? -eq 0 ]]; then echo "Exists"; else echo "Does not exist"; fi
Exists

$ git ls-tree -d branch1:branch2_dir 2&> /dev/null; \
> if [[ $? -eq 0 ]]; then echo "Exists"; else echo "Does not exist"; fi
Does not exist

编辑:在外部文件中使用目录定义的示例shell脚本


所以我浏览了一下,发现了这个。从长远来看,如果我需要它从上到下工作,那么它的工作不是会更好一点吗

MY_DIRNAME=../External
ifneq "$(wildcard $(MY_DIRNAME) )" ""
  # if directory MY_DIRNAME exists:
  INCLUDES += -I../External
else
  # if it doesn't:
  INCLUDES += -I$(HOME)/Code/External
endif

适当的分支是什么意思?您显示的代码不是Makefile,而是ksh脚本。而且它根本不涉及git。猜测你到底想要什么将是困难的。你能展示一下“主Makefile”的相关部分是什么样子的吗?你已经为你的新Makefile做了哪些尝试,有什么问题吗?以防万一,您也可以访问,了解如何优化您获得有用答案的机会。我深表歉意。所以我觉得实现我所需要的最好方法是开发一个脚本,然后将它集成到一个makefile中,我将把它放在目录树的顶部。是否可以将正确的目录路径保存在一个单独的文本文件中,然后让我的新makefile与之进行比较?当然可以。这在shell脚本中非常简单。用一个例子更新答案。谢谢!我的全部目标是创建一个makefile,它将递归地搜索我的git树,以确保目录存在并且位于正确的分支中。如果缺少目录,请创建该目录并从git repo克隆它。只是想确保所有东西都保持在预期的位置,以防我需要为构建拉东西。
MY_DIRNAME=../External
ifneq "$(wildcard $(MY_DIRNAME) )" ""
  # if directory MY_DIRNAME exists:
  INCLUDES += -I../External
else
  # if it doesn't:
  INCLUDES += -I$(HOME)/Code/External
endif