Фиксация и передача на GitHub с использованием JGit - Bare Repo? - PullRequest
3 голосов
/ 23 ноября 2011

Сегодня я подписался на github и преобразовал существующую файловую систему в git-репозиторий, используя описанную здесь технику:

http://crashingdaily.wordpress.com/2009/09/02/initing-a-new-remote-git-repository-with-existing-files/

Самое главное (я думаю) это включало эту строку:

git --bare init

Затем я последовал остальным инструкциям по настройке github.com (это было частью этого) и все было готово. Существующая файловая система была в Dropbox, поэтому я выполнил ту же настройку на двух других компьютерах, которые используют файловую систему (сейчас это git-репо).

Сегодня вечером я попытался заставить JGit добавить файл, зафиксировать его и затем нажать его. Вот суть кода до момента, когда он сломается:

FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder.setGitDir(new File("path/to/my/repo"))
          .readEnvironment() // scan environment GIT_* variables
          .findGitDir() // scan up the file system tree
          .build();

    Git git = new Git(repository);
    AddCommand add = git.add();
    try{
        add.addFilepattern("PlayState.as").call();`

Кстати, в основном это дословно взято из руководства по JGit. В этой последней строке в кавычках выдается исключение:

org.eclipse.jgit.errors.NoWorkTreeException: Bare Repository has neither a working tree, nor an index
at org.eclipse.jgit.lib.Repository.getIndexFile(Repository.java:838)
at org.eclipse.jgit.lib.Repository.lockDirCache(Repository.java:886)
at org.eclipse.jgit.api.AddCommand.call(AddCommand.java:136)
at flipa.FLIPAGame.writeToFlixel(FLIPAGame.java:77)
at flipa.FLIPAGame.main(FLIPAGame.java:58)

Так вот, я не говорю, что это неразумно утверждать, потому что, по правде говоря, я не лучший друг контроля версий. Я понимаю, что в голом репо есть только git и другие файлы, но мне кажется, что теперь в нем есть файлы. Я уже вручную добавил, зафиксировал и отправил на github с помощью git из терминала. Поэтому я не могу сразу понять, почему он даже не распознает репо.

Есть ли кто-нибудь?

РЕДАКТИРОВАТЬ - Для пояснения, убить этот репо не имеет большого значения, если кто-то может предложить другое решение. Я хочу, чтобы git-репозиторий использовал файловую систему в моем Dropbox и мог выполнять коммит на github через Java.

Ответы [ 3 ]

8 голосов
/ 08 декабря 2011

Я бы сказал, что для вашего кода опции setGitdir () и findGitDir () не должны использоваться одновременно.Чтобы получить существующий репозиторий, я использую findGitDir (новый файл («путь / к / моему / репо»), и этого достаточно.

2 голосов
/ 23 ноября 2011

Звучит так, как будто вы добавили файлы в пустой репозиторий.К чистому хранилищу нельзя прикасаться, кроме как с помощью команд git push и pull (или команд git в целом).Как руководство, я никогда не заглядываю в свои голые репозитории.

Он должен использоваться как центральное место.Как только вы создали репозиторий git bare, вы должны клонировать его, а затем работать с ним из клона, толкая и вытягивая из клона.

$ cd /dropbox/repo
$ git init --bare
$ cd /workdir
$ git clone file:///dropbox/repo
$ add files in here
$ git add .
$ git commit -m "initial version"
$ git push origin master
$ more changes here
$ git add etc.

Разница между этим и github заключается в клоне git,который затем приходит из другого места.Если честно, если у вас нет действительно веской причины иметь локальную копию, я просто забуду о репозитории dropbox и просто использую github.

0 голосов
/ 02 ноября 2012

Ваша третья строка кода, сразу после .build ();должно быть:

repository.create();

Это эквивалент команды "git init".

...