2013-03-24 9 views
5

Secondo questa risposta https://stackoverflow.com/a/13354944/867294 dovrebbe essere abbastanza facile impostare git per lavorare con mercurial "senza dipendenze o altro".Usare git-remote-hg su windows

Questo non sembra funzionare perfettamente su Windows.

ho cercato di seguire questa guida

https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg

Dopo aver sistemato il makefile per lavorare sul mio sistema e la costruzione git non ho potuto chiamare git-remote-hg perché si lamentava che non riusciva a trovare la interprete Python, tutto robusto è configurato correttamente. Così ho chiamato manualmente con

C:/Python27/python.exe git-remote-hg clone C:/TestMercurialRepo 

Questo è adesso mi dà il seguente errore.

Traceback (most recent call last): 
    File "git-remote-hg", line 99, in <module> 
    sys.exit(HgRemoteHelper().main(sys.argv)) 
    File "d:\development\msysgit\git\git_remote_helpers\helper.py", line 196, in m 
ain 
    repo = self.get_repo(alias, url) 
    File "git-remote-hg", line 33, in get_repo 
    if repo.capable('branchmap'): 
    File "c:\Python27\lib\site-packages\mercurial\repoview.py", line 205, in __get 
attr__ 
    return getattr(self._unfilteredrepo, attr) 
AttributeError: 'mqrepo' object has no attribute 'capable' 

Come posso risolvere questo problema?
Se esiste una versione pre compilazione ovunque, sarebbe fantastico, perché mi sembra che sto facendo molto per farlo funzionare.

+1

Perché vuoi interagire tramite 'git' con un repository mercurial remoto e su Windows? 'hg' ha un supporto molto migliore su Windows, e le interazioni non native avranno le loro stranezze. – vonbrand

+0

@vonbrand - Anche se metto in dubbio la saggezza della sua scelta, resta il fatto che desidera farlo in questo modo e dovrebbe essere in grado di farlo. – Omnifarious

+0

@Omnifarious, il mio punto è che ci sono modi meno dolorosi di fare ciò che (presumo) è voluto qui. Dai un'occhiata a [X Y problems] (http://www.perlmonks.org/index.pl?node_id=542341). – vonbrand

risposta

0

Dovrò approfondire un po ', ma questo sembra che git-remote-hg dipenda da una particolare versione di Mercurial che viene installata. In particolare quello in cui l'oggetto repo supporta il metodo capable.

Questo sembra un errore nel codice git-remote-hg. Qualsiasi versione di Mercurial nuova abbastanza da avere repoview è anche abbastanza nuova che ogni tipo di oggetto repo dovrebbe supportare il metodo capable. Quindi suppongo che l'oggetto che presenta il problema sia uno creato da git-remote-hg.

In ogni caso, è abbastanza evidente che git-remote-hg usa il codice di Mercurial Python per fare il suo lavoro. Quindi c'è una dipendenza tra di loro.

Inoltre, il backtrace non corrisponde al codice https://github.com/felipec/git/blob/fc/remote/hg/contrib/remote-helpers/git-remote-hg e quindi è difficile eseguire il debug della configurazione.

+0

Il mio file è un file generato che viene generato durante la compilazione, basato su questo file: https://github.com/msysgit/git/blob/694fb7247b0bb3a3f9810f1350f997ebdb6008ae/git-remote-hg.py Ad eccezione delle prime due righe che sono cancellati nel mio file git-remote-hg Non sono sicuro di quale sia la relazione tra questi file –

8

Ho ottenuto questo per funzionare oggi su Windows. Fondamentalmente, dato che le distribuzioni di msysgit non hanno supporto Python, ho preso il file git-remote-hg.py di Felipe e ho usato py2exe per comprimerlo come un eseguibile. Successivamente, ho messo tutto l'output py2exe nella cartella 'libexec' sotto la mia directory di installazione Git, e funziona.

Per farlo funzionare, è necessario:

  1. Python 2.7
  2. Il modulo Mercurial Python (finestre installatori here)
  3. py2exe (finestre installatori here)
  4. di Felipe git-remote-hg script python (salva raw nel file here)

Creare un file chiamato setup.py che contiene:

from distutils.core import setup 
import py2exe 

setup(console=['git-remote-hg.py']) 

Salvare il file sul sistema di file ed eseguire il seguente comando:

python setup.py py2exe --include mercurial  

py2exe produrrà una cartella chiamata 'dist' che contiene l'output. Copia il contenuto di quella cartella nella cartella libexec \ git-core sotto la tua cartella di installazione principale di Git (ad es. C: \ Programmi (x86) \ Git).

Ora, si dovrebbe essere in grado di clonare da un repository Mercurial utilizzando il client Git.

(Nota: ho scritto questi passaggi con un po 'di fretta, quindi per favore postare indietro se non ho lasciato nulla).

+0

Penso di aver seguito correttamente tutti i passaggi, ma quando provo e uso lo script ottengo 'LoadLibrary (pythondll) failed ' –