Вопрос

Мы хотим индексировать наши (довольно крупные) репозитории GIT, используя OpenGROK, и единственное, что я не смог выяснить, - это как индексировать все ветви. Из того, что я вижу, похоже, мне нужно проверять копии каждой ветви, которую я хочу индексировать, поэтому, если репозиторий, скажем, дюжина ветвей, мне нужно иметь дюжину копий, один Для каждой ветви, например,

git-repo-with-many-branches-master/
git-repo-with-many-branches-branch1/
git-repo-with-many-branches-branch2/
       :
git-repo-with-many-branches-branch12/

Это действительно так? Или есть способ сказать Opengrok посмотреть все ветви при создании его индекса?

Это было полезно?

Решение

Другие слои в Opengrok предназначены для работы на нескольких системах SCM, которые не работают как GIT, поэтому, к сожалению, вы должны проверить каждую ветвь, которую вы хотите индексировать в качестве отдельного репозитория GIT :-(

Вы всегда можете подать RFE для поддержки для просмотра нескольких ветвей в репозитории GIT.

Другие советы

Я написал сценарий именно для этой цели: даун. Анкет Вам нужно будет использовать daun CLI вместо git CLI в вашей работе Cron. Обратите внимание, что он не поддерживает историю OpenGROK GIT на момент написания статьи, так как мы заинтересованы только в быстром поиске OpenGROK. Мы указали бы наших пользователей OpenGROK на такие инструменты, как GitHub/BitBucket для веб-истории GIT.

Вот сценарий Bash, который я написал для того, чтобы сделать именно это. Он будет клонировать любые новые филиалы, обновлять любые существующие ветви и удалять ветви, которых больше не существует. Вот инструкции, которые «работают»; Вы можете сделать вещи более безопасными, но это достаточно хорошо, если ваш сервер доступен только в вашей локальной сети. У меня есть настройка задания Cron, которая просто запускает ее каждые 30 минут на сервере. Чтобы настроить задание Cron, чтобы запустить root, запустите:

sudo crontab -e

Затем вставьте в это содержимое:

*/30 * * * * /usr/local/bin/opengrok_index.sh

Затем напишите и закрыть:

:wq

Вам нужно будет установить «Ожидайте», который сценарий использует для ввода пароля вашего ключа SSH. Одна из этих двух команд будет работать в зависимости от того, какую ОС Linux вы используете:

sudo yum install expect
sudo apt-get install expect

Затем создайте файл по адресу/usr/local/bin/opengrok_index.sh:

sudo vi /usr/local/bin/opengrok_index.sh

Затем вставьте содержимое сценария (от нижней части этого поста) и измените переменные вверху в соответствии с вашей системой. Далее измените разрешения, чтобы только root мог прочитать его (в нем есть пароли):

sudo chmod 700 /usr/local/bin/opengrok_index.sh

Вы, вероятно, хотите протестировать запуск сценария вручную и заставить его работать, прежде чем ожидать работы Cron. Это конкретный сценарий, который я написал для своей конкретной настройки, поэтому вам может потребоваться внести некоторые заявления ECHO и сделать некоторую отладку, чтобы она работала правильно:

sudo /usr/local/bin/opengrok_index.sh

Дополнительные примечания:

  • Этот скрипт входит в GIT над SSH (не https). Таким образом, ваш GIT_USER должен существовать в системе и иметь ключ SSH под/HOME/USER/.SSH/ID_RSA, который имеет доступ к репо. Это стандартный git login stufce, поэтому я не буду здесь рассмотреть. Скрипт введет GIT_USER_SSH_PASPSWORD при запросе
  • Скрипт проверяет все файлы как GIT_USER, поэтому вам может потребоваться «разыграть» свой Checkout_Location к этому пользователю

Скрипт:

#!/bin/bash

SUDO_PASSWORD="password"
CHECKOUT_LOCATION="/var/opengrok/src/"
GIT_PROJECT_NAME="Android"
GIT_USER="username"
GIT_USER_SSH_PASSWORD="password"
GIT_URL="yourgit.domain.com"
OPENGROK_BINARY_FILE="/usr/local/opengrok-0.12.1.6/bin/OpenGrok"

# Run command as GIT_USER which has Git access
function runGitCommand {
  git_command="$@"

  expect_command="
    spawn sudo -u $GIT_USER $git_command
    expect {
        \"*password for*\" {
            send \"$SUDO_PASSWORD\"
            send \"\r\"
            exp_continue
        }
        \"*Enter passphrase for key*\" {
            send \"$GIT_USER_SSH_PASSWORD\"
            send \"\r\"
            exp_continue
        }
    }"

  command_result=$(expect -c "$expect_command" || exit 1)
}

# Checkout the specified branch over the network (slow)
function checkoutBranch {
  branch=$1

  # Check out branch if it does not exist
  if [ ! -d "$branch" ]; then
    runGitCommand git clone ssh://$GIT_URL/$GIT_PROJECT_NAME
    # Rename project to the branch name
    mv $GIT_PROJECT_NAME $branch || exit 1
  # Otherwise update the existing branch
  else
    cd $branch || exit 1
    runGitCommand git fetch
    runGitCommand git pull origin $branch || exit 1
    cd ..
  fi
}

# If the branch directory does not exist, copy the master
# branch directory then switch to the desired branch.
# This is faster than checkout out over the network.
# Otherwise, update the exisiting branch directory
function updateBranch {
  branch=$1

  if [ ! -d "$branch" ]; then
    mkdir $branch || exit 1
    rsync -av master/ $branch || exit 1
    cd $branch || exit 1
    runGitCommand git checkout -b $branch origin/$branch
    cd ..
  else
    cd $branch || exit 1
    runGitCommand git pull origin $branch || exit 1
    cd ..
  fi
}

# Change to the OpenGrok indexing location to checkout code
cd $CHECKOUT_LOCATION || exit 1

# Check out master branch
checkoutBranch master

# Get a list of all remote branches
cd master || exit 1
old_ifs=$IFS
IFS=$'\n'
origin_branches=( $(git branch -r) )
IFS=$old_ifs
origin_branches_length=${#origin_branches[@]}
cd .. # Move out of "master" directory

# Loop through and check out all branches
branches=(master)
for origin_branch in "${origin_branches[@]}"
do
  # Strip the "origin/" prefix from the branch name
  branch=${origin_branch#*/}

  # Ignore the "HEAD" branch
  # Also skip master since it has already been updated
  if [[ $branch == HEAD* ]] || [[ $branch == master* ]]; then
    continue
  fi

  branches+=("$branch")
  updateBranch $branch
done

# Get list of branches currently in OpenGrok
old_ifs=$IFS
IFS=$'\n'
local_branches=( $(ls -A1) )
size=${#local_branches[@]}
IFS=$old_ifs

# Get list of branches that are in OpenGrok, but do not exist
# remotely. These are branches that have been deleted
deleted_branches=()
for local_branch in "${local_branches[@]}"
do
  skip=0

  for branch in "${branches[@]}"
  do
    if [[ $local_branch == $branch ]]; then
      skip=1;
      break;
    fi
  done

  if [[ $skip == "0" ]]; then
    deleted_branches+=("$local_branch")
  fi
done

# Change to checkout directory again, in case some future code
# change brings us somewhere else. We are deleting recursively
# here and cannot make a mistake!
cd $CHECKOUT_LOCATION
# Delete any branches that no longer exist remotely
for deleted_branch in ${deleted_branches[@]}
do
  rm -rf ./$deleted_branch
done

# Reindex OpenGrok
$OPENGROK_BINARY_FILE index

Я ничего не знаю о OpenGROK, но, конечно, вы можете изменить филиалы, используя GIT:

git checkout master
# do the indexing here
git checkout branch1
# indexing
git checkout branch2
# and so on...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top