diff --git a/.gitignore b/.gitignore
index 5a61616fb290520701c3303abe0e4d015c786454..7b45ca3ae4ed5e7dff2ac42b9f2497c70ce28be0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,4 +27,5 @@ nbproject
 /public_html/vendor/medoo/
 /config/_inc_projects_config.php
 /config/inc_projects_config.php
+/config/inc_user2roles.php
 /.vscode/
\ No newline at end of file
diff --git a/public_html/deployment/classes/vcs.git.class.php b/public_html/deployment/classes/vcs.git.class.php
index d361b364e4071507b2cec9b65ac115b92a399c76..5032ae7784c52df34f50fcb5b5d36baf401b7eba 100644
--- a/public_html/deployment/classes/vcs.git.class.php
+++ b/public_html/deployment/classes/vcs.git.class.php
@@ -102,6 +102,11 @@ class vcs implements iVcs {
         return $this->_aCfg = $aRepoConfig;
     }
 
+    /**
+     * set directory für current branch of a project below tempdir
+     * In it the branch will be initialized
+     * @return type
+     */
     private function _setTempdir() {
         $this->_sTempDir = $this->_aCfg["url"];
         $this->_sTempDir = preg_replace('/[\@\.\:\/]/', '_', $this->_sTempDir);
@@ -213,7 +218,7 @@ class vcs implements iVcs {
      * @return array
      */
     private function _fetchRemoteBranches($bForceNoCache = false) {
-        $this->log(__FUNCTION__." start");
+        $this->log(__FUNCTION__."(bForceNoCache = ".($bForceNoCache ? 'true' : 'false').") start");
         $aReturn = array();
 
         if (!$this->getUrl()) {
@@ -227,8 +232,10 @@ class vcs implements iVcs {
         // list of cached branch keys
         if ($oCache->isExpired() || $bForceNoCache) {
             $sWorkdir = dirname($this->_sTempDir) . '/fetchRemoteBranches/';
+            $this->log(__FUNCTION__." - sWorkdir = $sWorkdir");
             $sGitCmd = 'export GIT_SSH="' . $this->_sWrapper . '" ; export PKEY="' . $this->_sKeyfile . '" ; ';
-            if (!file_exists($sWorkdir . ".git")) {
+
+            if (!is_dir($sWorkdir . ".git")) {
                 $sGitCmd.='mkdir -p "' . $sWorkdir . '" && cd "' . $sWorkdir . '" && ';
                 $sGitCmd.='git init >/dev/null && ';
                 $sGitCmd.='git remote add origin "' . $this->getUrl() . '" 2>&1 && ';
@@ -236,9 +243,9 @@ class vcs implements iVcs {
                 $sGitCmd.='cd "' . $sWorkdir . '" 2>&1 && ';
             }
             $sGitCmd.='git ls-remote --heads --tags origin 2>&1 ;';
-            $this->log(__FUNCTION__." start command $sGitCmd");
+            $this->log(__FUNCTION__." start command <code>$sGitCmd</code>");
             exec($sGitCmd, $aOutput, $iRc);
-            $this->log(__FUNCTION__." end with rc=$iRc ", ($iRc==0 ? 'info':'error'));
+            $this->log(__FUNCTION__." command ended with rc=$iRc ". '<pre>'.implode("\n", $aOutput).'</pre>', ($iRc==0 ? 'info':'error'));
             if ($iRc == 0) {
 
                 // use cache that getCommitmessageByBranch can access it
@@ -257,14 +264,14 @@ class vcs implements iVcs {
                     $this->log(__FUNCTION__ . ' loop over output of git ls-remote <pre>'.print_r($sBranchLine, 1).'</pre>');
                     $aTmp = explode("\t", $sBranchLine);
 
-                    $aBranch = explode("/", $aTmp[1]);
-                    $sBranch = array_pop($aBranch); // remove "refs"
+                    $sBranchPath = preg_replace('#^refs/#', '', $aTmp[1]);
+                    $sBranch = preg_replace('#^[a-z]*\/#', '', $sBranchPath);
 
                     // skip dereferences
                     // http://stackoverflow.com/questions/15472107/when-listing-git-ls-remote-why-theres-after-the-tag-name
                     if (!preg_match('/\^\{\}$/', $sBranch)) {
                         $sRevision = $aTmp[0];
-                        $sType = array_pop($aBranch);
+                        $sType   = preg_replace('#/.*$#',      '', $sBranchPath);
                         $sName = ($sType == "heads") ? "origin/" . $sBranch : $sBranch;
                         
                         $sBranchKey = $sName;
@@ -419,11 +426,11 @@ class vcs implements iVcs {
         }
 
         $sGitCmd.='git log -1 "' . $this->_sCurrentBranch . '" 2>&1 ; '; // 0.0 s
-        $this->log(__FUNCTION__." start command $sGitCmd");
+        $this->log(__FUNCTION__." start command <code>$sGitCmd</code>");
         // $sLoginfo = shell_exec($sGitCmd);
         exec($sGitCmd, $aOutput, $iRc);
+        $this->log(__FUNCTION__." command ended with rc=$iRc ". '<pre>'.implode("\n", $aOutput).'</pre>', ($iRc==0 ? 'info':'error'));
         $sLoginfo= implode("\n", $aOutput);
-        $this->log(__FUNCTION__." end with rc=$iRc <pre>$sLoginfo</pre>", ($iRc==0 ? 'info':'error'));
         
         /*
          * 
@@ -490,7 +497,7 @@ class vcs implements iVcs {
         $sBranchname = str_replace("origin/", "", $this->_sCurrentBranch);
 
         $sGitCmd = 'export GIT_SSH="' . $this->_sWrapper . '" ; export PKEY="' . $this->_sKeyfile . '" ; ';
-        $sReturn=false;
+        $aOutput=false;
         $iRc=false;
         
         // this does not checkout tags in git v1.7 - only branches:
@@ -499,18 +506,18 @@ class vcs implements iVcs {
         // 
         $sGitCmd .= 'echo git clone "' . $this->getUrl() . '" "'.$sWorkDir.'" 2>&1 \&\& cd  "'.$sWorkDir.'" \&\& git checkout "' . $sBranchname . '" ; ';
         $sGitCmd .= '     git clone "' . $this->getUrl() . '" "'.$sWorkDir.'" 2>&1 &&   cd  "'.$sWorkDir.'" &&   git checkout "' . $sBranchname . '" 2>&1 ';
-        $this->log(__FUNCTION__." start command $sGitCmd");
+        $this->log(__FUNCTION__." start command <code>$sGitCmd</code>");
         // $sReturn = shell_exec($sGitCmd);
-        exec($sGitCmd, $sReturn, $iRc);
-        $this->log(__FUNCTION__." end command $sGitCmd");
-        return implode("\n", $sReturn). "\nrc=$iRc";
+        exec($sGitCmd, $aOutput, $iRc);
+        $this->log(__FUNCTION__." command ended with rc=$iRc ". '<pre>'.implode("\n", $aOutput).'</pre>', ($iRc==0 ? 'info':'error'));
+        return implode("\n", $aOutput). "\nrc=$iRc";
     }
 
     /**
      * return url to vcs sources
      */
     public function getUrl() {
-        $this->log(__FUNCTION__." start");
+        $this->log(__FUNCTION__." --> ".$this->_aCfg["url"]);
         return $this->_aCfg["url"];
     }