साइगविन / गिट विचित्र टर्मिनल इश्यू


16

ठीक है, यह अजीब है। सबसे पहले, यह अप-टू-डेट साइबरविन पर चलने वाला मिनिट है, जिसमें साइबरविन्स setup.exe से खींचा गया है। मैं zsh चला रहा हूं।

$ 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>

यहाँ क्या हो रहा है? क्या यह एक टर्मिनल समस्या, एक शेल समस्या, एक गिट समस्या या एक साइबर समस्या है?

अपडेट: हां, मैं सिग्विन गिट संस्करण चला रहा हूं, विंडोज संस्करण नहीं:

$ 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
मैं एक टर्मिनल समस्या का अनुमान लगा रहा हूं। तथ्य यह है कि आपका पासवर्ड दिखाई देता है कि टर्मिनल ठीक से मूक मोड में नहीं डाला जा रहा है (जहां यह आपके द्वारा लिखे गए वर्णों को नहीं दिखाता है), और आपके द्वारा हिट किए जाने के बाद पासवर्ड पाठ फिर से प्रकट होने वाला तथ्य यह ^Cबताता है कि अक्षर उत्पन्न हुए हैं ' t गिट प्रक्रिया के स्टीन के लिए भेजा जा रहा है। लेकिन मुझे नहीं पता कि विशिष्ट समस्या क्या हो सकती है।
डेविड जेड

सुराग के लिए धन्यवाद - मैं इस पर आया था: code.google.com/p/mintty/issues/detail?id=56 - लेकिन इसमें अजगर निष्पादन योग्य जैसे इंटरैक्टिव मोड में गिट लगाने का कोई तरीका नहीं है ...
खाली

1
क्या आप सुनिश्चित हैं कि आप साइगविन के गिट के संस्करण का आह्वान कर रहे हैं? मिंट्टी समस्या 56 केवल देशी विंडोज कार्यक्रमों पर लागू होती है।
ak2

क्या आपको इस समस्या का हल मिला?
पौलदु ०

जवाबों:


9

ठीक है, मुझे लगता है कि मुझे एक निश्चित समाधान मिल गया है।

समस्या यह है कि, टर्मिनल का उपयोग किए बिना (पोट्टीसीग, मिनिट, cmd.exe), डिफ़ॉल्ट रूप से, बेहतर कॉन्फ़िगर विकल्प की अनुपस्थिति में, "सरल पासवर्ड प्रॉम्प्ट" का उपयोग करने की कोशिश करता है (जैसा कि आप विवरण में पढ़ सकते हैं) core.askpass विन्यास विकल्प )।

सरल पासवर्ड प्रॉम्प्ट जाहिरा तौर पर केवल वास्तविक यूनिक्स पर काम करता है, लेकिन सिगविन पर नहीं।

समाधान विंडोज के लिए SSH_ASKPASS संगत प्रोग्राम स्थापित करने और इसे उपयोग करने के लिए Git को कॉन्फ़िगर करना है।

मैंने जो किया वह था:

  1. C: \ को अनपैकिंग और कॉपी करके विन-एसश-एसपासपास एप्लिकेशन इंस्टॉल करें
  2. विन-एस-एस-बाइपास (आजकल आने के लिए कठिन, लेकिन http://www.satsignal.eu/software/runtime.html पर पाया गया ) द्वारा अपेक्षित बोरलैंड डेल्फी 5 रनटाइम को डाउनलोड और इंस्टॉल करें
  3. जीत-ssh-askpass का उपयोग करके पासवर्ड प्राप्त करने के लिए Git कॉन्फ़िगर करें git config --global core.askpass "C:/win_ssh_askpass.exe":। ध्यान दें कि EXE फ़ाइल के नाम में अंडरस्कोर है, न कि माइनस संकेत।
  4. याद रखें कि हमेशा अपना लॉगिन URL ( https://<user>@<domain>/<repository>) में रखें। अन्यथा, Git पासवर्ड के लिए पूछने से पहले लॉगिन के लिए पूछेगा, उसी पूछ उपयोगिता का उपयोग करके। आप अनजाने में अपना पासवर्ड लॉगिन के रूप में डाल सकते हैं, जिसे वेबसर्वर को भेजा जाएगा और इसके एक्सेस लॉग में सादे पाठ के रूप में लॉग इन किया जाएगा!

अब Git एक सुरुचिपूर्ण GUI विंडो का उपयोग करते हुए पासवर्ड मांगता है और टर्मिनल के उपयोग की परवाह किए बिना काम करता है :)


धन्यवाद, बेतरतीब ढंग से चलाने के लिए, लेकिन चलाता है :) मुझे नहीं पता कि क्यों git उम्मीद के मुताबिक नहीं चलता है। तोड़फोड़ यह ठीक है।
16

1
मैं बस निम्नलिखित भाग गया और यह एक पॉप चबूतरे: git config --global core.askpass "git-gui - askpass" क्लोन
डेरेक ग्रीर

7

मैं एक ही मुद्दे का अनुभव किया है - हालांकि मेरे मामले में मैं Cygwin सर्वर में SSH'd हूँ तो स्पष्ट रूप से एक Win32 GUI askpass काम नहीं करेगा।

इसके बजाय, मैंने आस्कपास करने के लिए यह सरल स्क्रिप्ट लिखी। हालाँकि, यह नियमित रूप से संकेत के रूप में अच्छी तरह से ट्टी डिवाइस प्राप्त करने से इस्तेमाल किया जा सकता है, /bin/tty.exeलेकिन यह एक अज्ञात कारण के लिए काम नहीं किया (अपने आप को आज़ाद करने के लिए या tty पाने के लिए एक और समाधान की तलाश में है, शायद मैं सिर्फ यह किसी तरह गलत हो गया )।

/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

सुनिश्चित करें कि यह स्क्रिप्ट निष्पादन योग्य है और इसे अपने git के core.askpass सेटिंग के रूप में उपयोग करें। चूँकि यह स्क्रिप्ट $ SSH_TTY वैरिएबल पर निर्भर करती है, इसलिए यह आम तौर पर SSH से ही काम करेगी। हालाँकि आप $ SSH_TTY सेट कर सकते हैं .bashrcया .bash_profileयदि आप परेशान हैं ; इस तरह यह एक कंसोल से भी काम करना चाहिए। आपकी आरसी स्क्रिप्ट में निम्नलिखित पंक्ति यह करनी चाहिए:

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

मैं इस समाधान की पुष्टि कर सकता हूं, बहुत अच्छी तरह से काम करता है।
श्लमर 13

यह मेरे लिए भी बहुत अच्छा काम किया। हालाँकि, मुझे उस पर एक अप्रत्यक्ष (1> और 2) जोड़ना था, "दिखाई देने में विफल ..." के लिए संदेश दिखाई देने के लिए।
एरिक

2

ऊपर दिए गए समाधान मेरे लिए काम नहीं करते हैं, लेकिन मुझे एक और मिला।

आपको ssh एजेंट चलाना है

बस ~ / .bashrc में जोड़ें और कंसोल को पुनरारंभ करें

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 क्रोम और ओपेरा लाइनब्रेक का उपयोग करते हैं जो बैश के साथ संगत नहीं है - बस कॉपी पेस्ट के लिए किसी अन्य ब्राउज़र का उपयोग करें


1

यह संभव है कि आपके पास एक मेटाचैकर हो, जैसे कि &, URL में। यह पृष्ठभूमि में चलने का कारण बनेगा, और एक यूनिक्स प्रणाली पर जैसे ही इसे स्टड से पढ़ने की कोशिश की जाएगी, इसे रोक दिया जाएगा। A ;लाइन के माध्यम से कमांड पार्टवे को भी समाप्त कर देगा, और Ctrl-Cइससे बाकी की लाइन (एक अलग कमांड) निरस्त हो जाएगी।

यह दिलचस्प है कि gitरेपो को इनिशियलाइज़ करता है, /cygdrive/c/src/project/dev/.git/भले ही आपने इसे उपयोग करने के लिए कहा हो ~/src/project/dev(जब तक कि आपके घर में एक अजीब जगह न हो)। यह सुझाव देगा कि gitकमांड बाकी कमांड लाइन को नहीं देख रहा है, जो कि आवारा &या ;URL में होता है।

(मैं इस समस्या के साथ बहुत बार किया है wget, हालांकि नहीं के साथ git।)

एक प्रयास करें git cloneएक अलग रेपो से, या एक ही रेपो से एक अलग परिवहन का उपयोग कर, यह देखने के लिए gitइस रेपो के लिए आम तौर पर या बस में गड़बड़ है। आप URL के चारों ओर एकल उद्धरण डालने का भी प्रयास कर सकते हैं।


~/src/cygdrive/c/src( C:\src) के लिए एक सहानुभूति है । &URL में कोई भी नहीं है। मैं एक सार्वजनिक git रिपॉजिटरी को क्लोन करने की कोशिश करूँगा, लेकिन आम तौर पर उन लोगों के पास पासवर्ड नहीं होगा ...
Emptyset

1

निम्नलिखित मुद्दे पर एक नज़र डालें - मैं काफी निश्चित हूं कि अब यह विंडोज के साथ मिनिटेट और इंटरऑपरेबिलिटी की एक सीमा है।

अंक 56 - मीनटेट

मुझे mysql को चलाने में भी दिक्कतें आई हैं और ऐसे में शेट्टी से - तो, ​​जवाब है कि यह एक टर्मिनल एमुलेशन समस्या है।


1

प्रश्न का उत्तर पहले ही दिया गया था ... मैं बस यह जोड़ना चाहूँगा कि मैंने कैसे तय किया:

Windows की जाँच करते हुए Git Bash, मैं उस gitसेट को देख सकता थाSSH_ASKPASS

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

इसलिए, साइग्विन पर, मैंने उसी चर को जोड़ा .bashrc

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

या

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

ऐसा करने से git से SSH_ASKPASS खुल जाता है ... मुझे कोई अतिरिक्त SW स्थापित करने या कोई अतिरिक्त स्क्रिप्ट बनाने की आवश्यकता नहीं थी।

आशा है कि यह मदद कर सकता है!


0

बरसों पहले मुझे याद है कि सिग्विन के सीवीएस ऑथेंटिकेशन के साथ कुछ समस्याएँ थीं ... यह करना था कि क्या आपने सिग्विन को डॉस या यूनिक्स स्टाइल लाइन एंडिंग्स (CRLF बनाम सिर्फ LF) के साथ स्थापित किया था; यह इंस्टॉलर डायलॉग के विकल्पों में से एक है। यदि आपने गलत को चुना है (मुझे लगता है कि डॉस वह था जिसने काम किया था) पासवर्ड समाप्त हो जाएगा या एक अजीब चरित्र या कुछ के साथ।

वैसे भी, अन्य विकल्प की कोशिश करने लायक हो सकता है।


0

मैं एक ही समस्या है, और, इस के विपरीत धागा , समस्या के लिए सभी संभव टर्मिनलों में Cygwin GIT के साथ होता है - puttycyg, minttyऔर शास्त्रीय विंडोज cmd.exe

मैं अभी भी एक उचित समाधान की तलाश कर रहा हूं, लेकिन एक समाधान है - हालांकि यह बहुत असुरक्षित है, आप पासवर्ड को रिपॉजिटरी URL में रखने की कोशिश कर सकते हैं, जैसे:

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

क्या वर्कअराउंड आपके लिए काम करता है?


0

यदि यह एक रिपॉजिटरी है जिसका आप अक्सर उपयोग करते हैं, तो सबसे आसान काम एक ~ / .netrc फ़ाइल बनाना हो सकता है

machine git.example.com
login yourlogin
password your password

जाहिर है, आपको फ़ाइल पर उचित रूप से ड्रैकोनियन अनुमतियाँ सेट करनी चाहिए।


परिवहन के रूप में ssh का उपयोग क्यों न करें?
वॉनब्रांड

0

टिप्पणी # 2 पर सिर्फ एक परिशोधन

यहां एक साइबरविन ssh-ask-pass (अनौपचारिक) है

बस tar.bz2 डाउनलोड करें और अपने साइबर फ़ोल्डर में अनपैक करें। यह बोरलैंड डेल्फी रनटाइम स्थापित किए बिना काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.