2014-12-05 12 views
15

Moja instytucja ostatnio zainstalowała dla nas GitLab. Zorientowałem się, jak zainstalować pakiety R z serwera GitLab przy użyciu devtools::install_git i działa tak długo, jak projekt jest publiczny.Instalowanie niepublicznych pakietów z Gitlab za pomocą devtools :: install_git

#* When modeltable project has Public status 
devtools::install_git('https://mini-me2.lerner.ccf.org/nutterb/modeltable.git') 

Jednak jeśli mam pakiet, który jest wymieniony jako albo „wewnętrzna” lub „prywatne”, nie mogę zainstalować pakiet bez jakiejś formy uwierzytelniania. Na razie nie wiedziałem, jak przekazać uwierzytelnienie za pośrednictwem adresu URL. Czy ktoś ma doświadczenie w pobieraniu pakietów z GitLab?

#* After changing the 'modeltable' project to Private status 
devtools::install_git('https://mini-me2.lerner.ccf.org/nutterb/modeltable.git') 
Preparing installation of modeltable using the Git-URL: https://mini-me2.lerner.ccf.org/nutterb/modeltable.git 
'/usr/bin/git'clone --depth 1 --no-hardlinks https://mini-me2.lerner.ccf.org/nutterb/modeltable.git /tmp/Rtmp5aj1cU/file24493dc03a32 
Error: There seems to be a problem retrieving this Git-URL. 
+0

Czy próbowałeś standardowego 'https: // user @ password: domain.com/user/repo.git'? Oczywiście bardzo niebezpieczny, ale tak samo będzie z każdym schematem, który będzie automatycznie zapisywać/przekazywać hasła. –

+0

Ach, możesz również uciec z '.netrc': https://confluence.atlassian.com/display/STASH/Permanently+authenticating+withGit+repositories#Nieustannie uwierzytelniając się zGitreposozytami-Używanie pliku.netrc –

+0

Ta dokładna sugestia nie działa, ale robi to 'https: // użytkownik: hasło @ domena.com/user/repo.git'. Muszę już być uwierzytelniony w sieci mojej instytucji, zanim będę mógł dostać się do GitLab, więc bezpieczeństwo nie jest tak krytycznym problemem. To pomaga jednak. Mogę przynajmniej użyć tego do napisania funkcji do instalacji pakietów. – Benjamin

Odpowiedz

5

Powinieneś wypróbować kombinację pakietów devtools i getPass.

https://github.com/wrathematics/getPass

devtools::install_git(
    "https://gitlab.com/foo/bar.git", 
    credentials = git2r::cred_user_pass("uname", getPass::getPass()) 
) 

uname Gdzie jest twoja nazwa Gitlab użytkownika.

+1

Czy nie wysyłasz hasła za pośrednictwem przewodu w zwykłym tekście? – Shape

+0

Jest to dobra opcja, ponieważ, w przeciwieństwie do odpowiedzi Benjamina, getPass maskuje hasło przed wyświetlaniem na ekranie. W przeciwnym razie uważam, że masz rację, że będzie przesyłany w postaci zwykłego tekstu. Sądzę, że ssh jest właściwą drogą, jeśli się o to martwisz. – jsta

+2

Moim zadaniem do maskowania hasła lub przechowywania poświadczeń jest w rzeczywistości użycie 'getPass' wraz z pakietem' openssl' do szyfrowania zapisanych poświadczeń, więc mogę nadal używać ich wielokrotnie podczas sesji, ale odszyfrowuję je tylko wtedy, gdy ich potrzebuję. Ale w celu uwierzytelnienia czuję się bardzo niepewnie, nie używając 'https' – Shape

3

komentarz Per Ciro, uwierzytelnianie za pomocą

https://user:[email protected]/user/repo.git 

załatwia sprawę. Tak więc pełne wywołanie to:

devtools::install_git('https://user:[email protected]/nutterb/modeltable.git') 

Należy pamiętać, że mogą istnieć problemy związane z bezpieczeństwem podczas przekazywania nazwy użytkownika i hasła w ten sposób. Nie jestem całkowicie wykształcony w tych sprawach. Działa to wystarczająco dobrze dla moich celów, ponieważ jestem uwierzytelniony w sieci mojej firmy, aby zobaczyć serwer GitLab.

8

Zdecydowanie polecam jechać drogą SSH, a poniżej działa na to. Zauważyłem, że przejście do SSH było łatwe, szczególnie z R i RStudio. Używam systemu Windows w poniższym przykładzie. Edycje z kodu, którego używam w praktyce, są we wszystkich wersjach.

creds = git2r::cred_ssh_key("C:\\Users\\MYSELF\\.ssh\\id_rsa.pub", 
          "C:\\Users\\MYSELF\\.ssh\\id_rsa") 
devtools::install_git("[email protected]:GITLABGROUP/PACKAGE.git", 
         credentials = creds) 

Dwa szybkie dodatkowe komentarze:

  • git2r jest importowane z DevTools, nie ma potrzeby, aby go zainstalować oddzielnie.
  • Również nie sądzę, że powinno to wymagać wymieniania, ale hasła w postaci zwykłego tekstu w swoim skrypcie to bardzo zły pomysł.