Cygwin / Git Tuhaf Terminal Sorunu


16

Pekala, bu garip. Öncelikle, bu güncel cygwin üzerinde çalışan nane, git cygwin's setup.exe'den çekildi. Zsh kullanıyorum.

$ git clone https://<user>@<domain>/<repository>/ ~/src/project/dev
Initialized empty Git repository in /cygdrive/c/src/project/dev/.git/
Password: <actual password in plain text appears>
# Nothing happens...
^C
$ <password text that I just typed>
zsh: command not found: <same password text>

Burada neler oluyor? Bu bir terminal sorunu, bir kabuk sorunu, bir git sorunu veya bir cygwin sorunu mu?

Güncelleme: Evet, Windows sürümünü değil Cygwin git sürümünü çalıştırıyorum:

$ which git
/usr/bin/git
$ git --version
git version 1.7.1
$ /cygdrive/c/Program\ Files\ \(x86\)/Git/bin/git.exe --version
git version 1.7.0.2.msysgit.0

1
Bir terminal problemi tahmin ediyorum. Parolanızın görünmesi, terminalin sessiz moda (düzgün bir şekilde yazdığınız karakterleri göstermediği) bir konuma getirilmediğini ve parola metninin vurulduktan sonra tekrar görünmesi ^C, karakterlerin t git işleminin standartlarına gönderiliyor. Ama belirli sorunun ne olabileceğini bilmiyorum.
David Z

İpucu için teşekkürler - bununla karşılaştım: code.google.com/p/mintty/issues/detail?id=56 - ama
git'i

1
Cygwin'in git sürümünü çağırdığınızdan emin misiniz? Mintty sorunu 56 yalnızca yerel Windows programları için geçerlidir.
ak2

Bu soruna bir çözüm buldunuz mu?
pauldoo

Yanıtlar:


9

Tamam, sanırım kesin bir çözüm buldum.

Sorun, kullanılan terminale (puttycyg, mintty, cmd.exe) bakılmaksızın, Git'in varsayılan olarak daha iyi yapılandırılmış alternatiflerin yokluğunda "basit bir şifre istemi" (açıklamasında okuyabileceğiniz gibi) kullanmaya çalışmasıdır. core.askpass yapılandırma seçeneği ).

Basit şifre istemi görünüşe göre sadece gerçek UNIX'te çalışıyor, Cygwin'de çalışmıyor.

Çözüm, Windows için SSH_ASKPASS uyumlu bir program yüklemek ve Git'i bunu kullanacak şekilde yapılandırmaktır.

Yaptığım şey:

  1. Win: ssh-askpass uygulamasını paketinden çıkarıp C: \ 'ya kopyalayarak yükleyin
  2. Win-ssh-askpass için gerekli olan Borland Delphi 5 çalışma zamanını indirin ve yükleyin (günümüzde gelmek zor, ancak http://www.satsignal.eu/software/runtime.html adresinde bir tane bulundu )
  3. Git'i win-ssh-askpass: kullanarak parola alacak şekilde yapılandırın git config --global core.askpass "C:/win_ssh_askpass.exe". EXE dosyasının eksi işaretleri değil, adının altını çizdiğini unutmayın.
  4. Girişinizi her zaman URL'ye ( https://<user>@<domain>/<repository>) yerleştirmeyi unutmayın. Aksi takdirde Git, aynı askpass yardımcı programını kullanarak şifre sormadan önce oturum açmanızı isteyecektir. Parolanızı bilmeden, web sunucusuna gönderilecek ve erişim günlüğüne düz metin olarak girilecek giriş olarak girebilirsiniz!

Git, zarif bir GUI penceresi kullanarak şifre ister ve kullanılan terminalden bağımsız olarak çalışır :)


teşekkürler, rastgele çalıştırın, ama çalışır :) Git neden beklendiği gibi çalışmıyor bilmiyorum. yıkım iyi yapar.
corretge

1
Ben sadece aşağıdaki koştu ve bir gui açılır: git config --global core.askpass "git-gui - askpass" klon
Derek Greer

7

Ben aynı sorunu yaşadım - ancak benim durumumda ben SSH'd Cygwin sunucusunda öylesine açıkçası bir Win32 GUI askpass çalışmaz.

Bunun yerine, askpass yapmak için bu basit komut dosyasını yazdım. Tty cihazını alarak düzenli istemlerde de kullanılabilir, /bin/tty.exeancak bu bilinmeyen bir nedenden dolayı işe yaramadı (kendinize tty almak veya tty'yi almak için başka bir çözüm aramaktan çekinmeyin, belki de bir şekilde yanlış anladım ).

/bin/askpass.sh:

#!/bin/bash

TTY=$SSH_TTY
[ -c "$TTY" -a -r "$TTY" -a -w "$TTY" ] \
  || { echo "Failed to open device \`$TTY'!"; exit 1; }
exec <$TTY

echo -n "$@" >$TTY
read -s P
echo >$TTY

echo $P

Bu komut dosyasının yürütülebilir olduğundan emin olun ve git'in core.askpass ayarı olarak kullanın. Bu komut dosyası $ SSH_TTY değişkenine dayandığından, normalde yalnızca SSH'den çalışacaktır. Ancak $ SSH_TTY ayarını .bashrcveya ayarlanmamışsa ayarlayabilirsiniz .bash_profile; bu şekilde bir konsoldan bile çalışması gerekir. Rc betiğinizde aşağıdaki satır bunu yapmalıdır:

[ -z "$SSH_TTY" ] && export SSH_TTY=$(/bin/tty.exe)

Bu çözümü onaylayabilirim, çok iyi çalışıyor.
schlamar

Bu benim için de iyi çalıştı. Ancak, görünür olması için "Açılamadı ..." iletisine bir yönlendirme (1> & 2) eklemek zorunda kaldım.
Eric

2

yukarıdaki çözümler benim için işe yaramıyor, ama başka bir çözüm buldum.

ssh ajanını çalıştırmalısın

~ / .bashrc dosyasına ekleyin ve konsolu yeniden başlatın

SSH_ENV=$HOME/.ssh/environment



# start the ssh-agent

function start_agent {

    echo "Initializing new SSH agent..."

    # spawn ssh-agent

    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"

    echo succeeded

    chmod 600 "${SSH_ENV}"

    . "${SSH_ENV}" > /dev/null

    /usr/bin/ssh-add

}



if [ -f "${SSH_ENV}" ]; then

     . "${SSH_ENV}" > /dev/null

     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {

        start_agent;

    }

else

    start_agent;

fi

PS Chrome ve Opera, bash ile uyumlu olmayan linebreak kullanıyor - kopya yapıştırmak için sadece başka bir tarayıcı kullanın


1

&URL'de bir metakarakteriz olması mümkündür . Bu git'in arka planda çalışmasına neden olur ve bir Unix sisteminde stdin'den okumaya başlar başlamaz durdurulur. A ;ayrıca komutu satır boyunca yarıda keser ve satırın Ctrl-Cgeri kalanının (ayrı bir komut) durdurulmasına neden olur.

Kullanmayı söylemiş olsanız bile gitrepoyu başlatması ilginçtir (ana dizininiz garip bir yerde olmadıkça). Bu, komutun komut satırının geri kalanını görmediğini gösterir; bu, bir sapma veya URL'de olursa olur ./cygdrive/c/src/project/dev/.git/~/src/project/devgit&;

(Bu sorunu pek çok kez yaşadım wget, olmasa da git.)

Genel olarak mı yoksa sadece bu repo için mi karıştığını git clonegörmek için farklı bir repo'dan veya aynı repodan farklı bir taşıma kullanarak deneyin git. URL'nin etrafına tek tırnak işareti koymayı da deneyebilirsiniz.


~/src, /cygdrive/c/src( C:\src) için bir sembolik bağlantıdır . &URL'de hiç yok . Bir kamu git deposunu klonlamaya çalışacağım, ancak genellikle bunların bir şifresi olmayacak ...
emptyset

1

Aşağıdaki soruna bir göz atın - şimdi sadece Windows ile nane ve birlikte çalışabilirliğin bir sınırlaması olduğuna eminim.

Sayı 56 - Nane

Ayrıca mysql ve böyle nane çalışan sorunları yaşadım - yani, bu bir terminal öykünme sorunu olmasıdır.


1

Soru zaten cevaplandı ... Sadece nasıl düzelttiğimi eklemek istiyorum:

Windows'u kontrol ederken Git Bash, şu gitsetin görebildiğini gördümSSH_ASKPASS

$ echo $SSH_ASKPASS
/mingw64/libexec/git-core/git-gui--askpass

Cygwin'de aynı değişkeni .bashrc

# Unconditionally export SSH_ASKPASS
export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

veya

# export SSH_ASKPASS only if git is installed
hash git 2>/dev/null && export SSH_ASKPASS="/mingw64/libexec/git-core/git-gui--askpass"

Bunu yaparken git, Git'ten SSH_ASKPASS'ı açar ... Başka bir SW yüklemek veya ek komut dosyası oluşturmak zorunda kalmadım.

Umarım bu yardımcı olabilir!


0

Yıllar önce Cygwin'in CVS kimlik doğrulamasında bazı problemler yaşadığımı hatırlıyorum ... Cygwin'i DOS veya Unix stil satır sonlarıyla (CRLF vs just LF) yükleyip yüklemediğinizle ilgiliydi; yükleyici iletişim kutusundaki seçeneklerden biridir. Yanlış olanı seçtiyseniz (DOS'un işe yaradığını düşünüyorum) parola karışık veya sahte bir karakter veya bir şeyle sonuçlanacaktır.

Her neyse, diğer seçeneği denemeye değer olabilir.


0

Ben aynı sorun var ve bu aykırı iplik , sorun tüm olası terminallerde Cygwin GIT ile gerçekleşir - puttycyg, minttyve klasik, Windows cmd.exe.

Hala uygun bir çözüm arıyorum, ancak bir geçici çözüm var - çok güvensiz olmasına rağmen, şifreyi depo URL'sine yerleştirmeyi deneyebilirsiniz, örneğin:

git clone https://<user>:<password>@<domain>/<repository>/

Geçici çözüm sizin için çalışıyor mu?


0

Sık kullandığınız bir havuzsa, en kolay şey bir ~ / .netrc dosyası oluşturmak olabilir.

machine git.example.com
login yourlogin
password your password

Açıkçası, dosya üzerinde uygun şekilde draconian izinleri ayarlamanız gerekir.


Neden ssh'yi sadece taşıma olarak kullanmıyorsunuz?
vonbrand

0

Yorum # 2'de sadece bir ayrıntılandırma

Burada bir cygwin ssh-ask-pass (gayri resmi) var

Tar.bz2 dosyasını indirin ve cygwin klasörünüze açın. Borland delphi çalışma zamanını yüklemeden çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.