Я ищу ЛЮБУЮ помощь с этим. У меня настроен gitblit, я использовал слегка модифицированную версию одного из скриптов groovy hooks. Мне нужен скрипт-ловушка, который развертывает голову в папку, которую затем можно использовать в качестве веб-сайта для этого сайта в WAMP. По сути, изменения будут отправлены на gitblit, и скрипт развернет эти изменения на нашем сервере разработки без какого-либо ручного вмешательства. У меня это работало над подрывной деятельностью, с простым обновлением svn на рабочей копии в качестве веб-рута. Gitblit не кажется таким простым.
Если папка клона уже существует, я хочу, чтобы она выполняла команду Pull на мастере. Код клона работает правильно и успешно создает клон репозиториев. Но затем, когда я вношу больше изменений, а клон существует, он выдает эту ошибку:
groovy.lang.MissingMethodException: No signature of method: static org.eclipse.j
git.api.Git.pull() is applicable for argument types: () values: []
Полный заводной скрипт ниже. Я немного новичок в groovy и не использовал java должным образом в течение многих лет, поэтому любая помощь даст вам богоподобный статус. Заранее спасибо.
import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import com.gitblit.utils.StringUtils
import java.text.SimpleDateFormat
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.api.*;
import org.eclipse.jgit.api.errors.*;
import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.util.FileUtils
import org.slf4j.Logger
// Indicate we have started the script
logger.info("Deploying website (In Repository ${repository.name}) for ${user.username}")
def rootFolder = 'C:/Program Files/wamp/www/git-repositories'
def bare = false
def cloneAllBranches = true
def cloneBranch = 'refs/heads/master'
def includeSubmodules = true
def repoName = repository.name
def destinationFolder = new File(rootFolder, StringUtils.stripDotGit(repoName))
def srcUrl = 'file://' + new File(gitblit.getRepositoriesFolder(), repoName).absolutePath
// if there is already a clone
if (destinationFolder.exists()) {
PullCommand cmd = Git.pull();
}
else
{
// clone the repository
logger.info("cloning ${srcUrl} to ${destinationFolder}")
CloneCommand cmd = Git.cloneRepository();
cmd.setBare(bare)
if (cloneAllBranches)
cmd.setCloneAllBranches(true)
else
cmd.setBranch(cloneBranch)
cmd.setCloneSubmodules(includeSubmodules)
cmd.setURI(srcUrl)
cmd.setDirectory(destinationFolder)
Git git = cmd.call();
git.repository.close()
// report clone operation success back to pushing Git client
clientLogger.info("${repoName} cloned to ${destinationFolder}")
}
ОБНОВЛЕНИЕ: ошибок больше нет, но ни одно из изменений, похоже, не вносится в клонированные репозитории:
logger.info("Development clone already exists, pulling changes...")
def cloneLocation = rootFolder + "/" + StringUtils.stripDotGit(repoName) + "";
FileRepository repo = new FileRepository("C:/Program Files/wamp/www/git-repositories/brightercreative.dev");
Git git = new Git(repo);
logger.info("Pulling changes from "+cloneLocation )
git.pull();
git.repository.close();
logger.info("Pulled changes "+cloneLocation )
Git
нет методаstatic
pull
, это метод экземпляра, поэтому вам нужен экземплярGit
, указывающий на репозиторий. - person tim_yates   schedule 12.03.2014new Git( new FileRepository( destinationFolder ) ).pull()
? Ничего из этого не пробовал, так что это предположение ;-) - person tim_yates   schedule 12.03.2014org.eclipse.jgit.internal.storage.file.FileRepository
. Это говорит о том, что он должен указывать на папку.git
, я думаю... Какую ошибку вы получаете? - person tim_yates   schedule 12.03.2014