Frage

Wir möchten unsere (ziemlich große) Sammlung von Git -Repositories mit OpenGrok indexieren, und ich konnte nicht herausfinden, wie man alle Zweige indexiert. Nach dem, was ich sehen kann, sieht es so aus, als müsste ich Kopien jedes Zweigs überprüft haben, den ich indexieren möchte. Wenn ein Repository beispielsweise ein Dutzend Zweige hat, muss ich ein Dutzend Kopien davon haben, eines, eines, eines, eines, eines Für jeden Zweig, z.

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

Stimmt das wirklich? Oder gibt es eine Möglichkeit, OpenGrok zu sagen, sie sollen sich ansehen alle Die Zweige beim Erstellen ihres Index?

War es hilfreich?

Lösung

Die anderen Ebenen in OpenGrok sind so konzipiert, dass sie an mehreren SCM-Systemen arbeiten, die nicht wie Git funktionieren.

Sie können jederzeit ein RFE für die Unterstützung für das Durchsuchen mehrerer Zweige in einem Git -Repository einreichen.

Andere Tipps

Ich habe genau für diesen Zweck ein Skript geschrieben: daun. Sie müssen verwenden daun cli statt von git CLI in Ihrem Cron -Job. Beachten Sie, dass es zum Zeitpunkt des Schreibens keine OpenGrok -Git -Geschichte unterstützt, da wir nur an OpenGrok -Schnell -Suchfunktionen interessiert sind. Wir würden unsere OpenGrok-Benutzer auf Tools wie Github/Bitbucket für die webbasierte GIT-Geschichte verweisen.

Hier ist ein Bash -Skript, das ich für genau das geschrieben habe. Es wird alle neuen Zweige klonen, vorhandene Zweige aktualisieren und Zweige löschen, die nicht mehr existieren. Hier sind Anweisungen, die "funktionieren"; Sie können sich dafür entscheiden, die Dinge sicherer zu machen, aber dies ist gut genug, wenn Ihr Server auf Ihrem LAN nur zugänglich ist. Ich habe ein Cron -Job -Setup, das es nur alle 30 Minuten auf dem Server ausführt. Um den Cron -Job als Root zu richten, rennen Sie:

sudo crontab -e

Fügen Sie dann diese Inhalte ein:

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

Dann schreibe und schließe:

:wq

Sie müssen "Erwartung" installieren, mit dem das Skript das Passwort Ihres SSH -Schlüssels eingibt. Einer dieser beiden Befehle funktioniert je nachdem, welches Linux -Betriebssystem Sie verwenden:

sudo yum install expect
sudo apt-get install expect

Erstellen Sie dann eine Datei unter /usr/local/bin/opengrok_index.sh:

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

Fügen Sie als Nächstes den Inhalt des Skripts (von unten in diesem Beitrag) ein und ändern Sie die Variablen oben gemäß Ihrem System. Ändern Sie als Nächstes die Berechtigungen, damit nur Root es lesen kann (es enthält Passwörter):

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

Sie möchten wahrscheinlich testen, dass das Skript manuell ausgeführt wird und es zum Laufen bringt, bevor Sie erwarten, dass der Cron -Job funktioniert. Dies ist ein bestimmtes Skript, das ich für mein spezielles Setup geschrieben habe. Möglicherweise müssen Sie möglicherweise einige Echo -Aussagen eingeben und einige Debuggs durchführen, damit es richtig funktioniert:

sudo /usr/local/bin/opengrok_index.sh

Zusätzliche Bemerkungen:

  • Dieses Skript meldet sich über SSH (nicht HTTPS) in Git ein. Daher muss Ihr Git_User im System existieren und einen SSH -Schlüssel unter /home/user/.sssh/id_rsa haben, der Zugriff auf das Git -Repo hat. Dies ist Standard -Git -Login -Sachen, also werde ich hier nicht darüber hinausgehen. Das Skript gibt das Auffüllen des GIT_USER_SSH_PASSWORD ein
  • Das Skript überprüft alle Dateien als git_user, sodass Sie möglicherweise Ihre Checkout_location an diesen Benutzer "steuern" müssen

Skript:

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

Ich weiß nichts über OpenGrok, aber natürlich können Sie die Zweige mit Git wechseln:

git checkout master
# do the indexing here
git checkout branch1
# indexing
git checkout branch2
# and so on...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top