验证多个目录存在于其适当的分支上

Verifying multiple directories exist on their appropriate branches

我需要创建一个以主 Makefile 为源的新 Makefile,然后使用其中定义的变量来检查目录是否存在于其适当的本地分支中。我在 Whosebug 上阅读了很多关于检查目录是否存在的帖子,但我一直在研究如何确定它们是否在适当的分支中。

#!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

以下命令来自运行 master 分支。

对于分支 1:

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

对于分支 2:

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

在您的 shell 脚本中,您可以在条件中使用命令的 return 值:

$ 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 脚本使用外部文件中的目录定义。

$ cat branch-dirs.txt
branch1:branch1_dir
branch2:branch2_dir
branch2:non_existent_dir

$ cat check_dirs.sh
#!/bin/bash

readonly BRANCH_DIR_FILE="./branch-dirs.txt"

for dir_to_check in $(cat "$BRANCH_DIR_FILE"); do
  git ls-tree -d "${dir_to_check}" 2&> /dev/null
  if [[ $? -eq 0 ]]; then
    echo "${dir_to_check} exists."
  else
    echo "${dir_to_check} does not exist."
  fi
done

$ ./check_dirs.sh
branch1:branch1_dir exists.
branch2:branch2_dir exists.
branch2:non_existent_dir does not exist.

所以我在浏览时发现了这个 post。因为我需要它从顶层向下工作,所以这对于我需要它在长期 运行 中做的事情会不会更好一些?

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