গিট-আপলোড-প্যাক: দূরবর্তী গিট রেপো ক্লোনিং করার সময় কমান্ড পাওয়া যায় নি


170

আমি আমার প্রকল্পের দুটি অনুলিপি সিঙ্কে রাখতে গিট ব্যবহার করছি, একটি আমার স্থানীয় বাক্স, অন্যটি পরীক্ষার সার্ভার। এটি এমন একটি সমস্যা যা আমি যখন ssh ব্যবহার করে আমাদের দূরবর্তী বিকাশ সার্ভারে লগইন করি;

git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.

(দোষীদের সুরক্ষার জন্য ফাইল-নাম পরিবর্তন করা হয়েছে ...!)

দুটি বাক্সই সোলারিস 10 এএমডি চালায়। আমি কিছু খনন করেছি, যদি আমি --upload-pack=$(which git-upload-pack)কমান্ডটি কাজ করি তবে (এবং $PATHএটিতে আরটিএফএম সমাধান অনুসারে 'গিট-আপলোড-প্যাক' করার পথটি প্রমাণিত হয় ) তবে এটি সত্যিই বিরক্তিকর, প্লাস 'গিট পুশ' কাজ করে না, কারণ আমি মনে করি না যে এখানে কোনও --unpack=বিকল্প আছে।

ঘটনাচক্রে, সমস্ত গিট কমান্ডগুলি আমার স্থানীয় বাক্স থেকে সূক্ষ্মভাবে কাজ করে, এটি একই এনএফএস মাউন্টে ইনস্টল করা সফ্টওয়্যার (1.5.4.2) এর একই সংস্করণ /usr/local/bin

কেউ সাহায্য করতে পারেন?

উত্তর:


169

git-upload-packলগ-ইন শেল থেকে নিশ্চিত হয়ে নিন যে পথে রয়েছে। (আমার মেশিনে এটি রয়েছে /usr/bin)।

অ-লগইন শেল থেকে দূরবর্তী মেশিনে আপনার পথটি কেমন দেখাচ্ছে তা দেখার জন্য এটি ব্যবহার করে দেখুন:

ssh you@remotemachine echo \$PATH

(এটি বাশ, জেডএস, এবং টিসিএস এবং সম্ভবত অন্যান্য শেলগুলিতেও কাজ করে))

যদি এটি ফেরত দেয় সেই ডিরেক্টরিটিতে যে ডিরেক্টরিটি অন্তর্ভুক্ত না থাকে তবে git-upload-packআপনাকে এটি .bashrc(বাশের জন্য), .zshenv(জেডএসের জন্য), .cshrc( টিসিএসএসের জন্য) বা আপনার শেলের সমতুল্য স্থাপন করে ঠিক করতে হবে ।

দূরবর্তী মেশিনে আপনাকে এই পরিবর্তনটি করতে হবে।

আপনার দূরবর্তীটিতে কোন পাথটি যুক্ত করতে হবে তা যদি আপনি নিশ্চিত না হন তবে আপনি PATHএই কমান্ডের সাহায্যে এটি খুঁজে পেতে পারেন (আপনাকে এটি দূরবর্তী মেশিনে চালানো দরকার):

which git-upload-pack

আমার মেশিনে যে মুদ্রণ /usr/bin/git-upload-pack। সুতরাং /usr/binএক্ষেত্রে আপনার যে দূরত্বটি আপনার দূরবর্তী নন-লগইন শেলটিতে রয়েছে তা নিশ্চিত করার জন্য আপনার প্রয়োজনীয় পথটি PATH


2
আমি যদি আমার মেশিনে কমান্ডটি চালিত করি তবে পথটি সঠিক ছিল, তবে অন্যদিকে যদি আমি এটি চালিত করি তবে ভুল। (রিমোট মেশিন থেকে আমার কাছে ফিরে) আমার স্থানীয় সম্পাদনা। ধন্যবাদ
ক্রিস হুয়াং-লিভার

6
ওএসএক্স চিতাবাঘে কাজ করেছেন
নোয়া ক্যাম্পবেল

1
আমার ক্ষেত্রে কমান্ডটি পাওয়া যায় নি কারণ ম্যাকপোর্টসের মাধ্যমে গিট ইনস্টল করা হয়েছিল, যা এটি প্রবেশ করে /opt/local/bin। এটিকে আমার .bashrcমাধ্যমে যুক্ত করা আমার পক্ষে PATH=$PATH:/new/path/hereকাজ করেছে।
বেন স্কিমারান

1
@ আররেলোয়েড ব্যাকস্ল্যাশ ডলারের চিহ্ন থেকে বাঁচতে এবং স্থানীয় মেশিনে $ PATH সম্প্রসারণ রোধ করবে এবং এর পরিবর্তে "প্রতিধ্বনি $ PATH" আক্ষরিকভাবে দূরবর্তী মেশিনে পাস করবে। এটি আপনি কী শেল ব্যবহার করছেন তার উপর নির্ভর করে; এটি zsh এবং ব্যাশে আমার জন্য কাজ করে। আপনি একক উদ্ধৃতি ব্যবহার করে সঠিক ফলাফল পেতে সক্ষম হতে পারেন, যেমন "ssh you @ remotemachine 'echo $ PATH'" - এ যান। অন্যথায়, আপনি কোন শেল ব্যবহার করছেন? হতে পারে এখানে অন্য কেউ সেই শেলটি ব্যবহার করে এবং আপনাকে কাজের দিকনির্দেশ দিতে পারে।
ম্যাট কার্টিস

3
@ অ্যানারেলোয়েড: আপনি যখন "গিট পথটি প্রিন্ট করা হয় না" বলছেন, আপনি কি বোঝাতে চেয়েছেন যে এসএসএস প্রচুর পরিমাণে জিনিস দেখায় কিন্তু গিটটি যে পথে চলছে তা নয়? যদি তা হয় তবে ওপি'র ঠিক একই সমস্যা ছিল এবং একটি সিমিলিংক ব্যবহার করা কেবল একটি বান্দিড। "ssh .. echo \$PATH" কমান্ড আপনাকে দূরবর্তী মেশিন, যা আপনার লগইন পথে আলাদা হতে পারে পথ দেখাতে হবে, কিন্তু এই অত্যন্ত গুরুত্বপূর্ণ জিনিস এটা কাজ নেওয়ার অধিকার পেতে হয়, এবং আপনি তা করতে পারে পাথ সেটিং Git অন্তর্ভুক্ত করা দ্বারা .bashrcউপর রিমোট মেশিন ম্যানপেজ অনুযায়ী, .profile/ .bash_profileকেবলমাত্র ইন্টারেক্টিভ লগইনগুলির জন্য পঠিত হয়।
ম্যাট কার্টিস

66

আপনি পথটি নির্দিষ্ট করতে "-u" বিকল্পটিও ব্যবহার করতে পারেন। আমি এমন মেশিনগুলিতে সহায়ক বলে মনে করি যেখানে আমার .বাশার্ক অ-ইন্টারেক্টিভ সেশনে উত্সাহ পাবে না। উদাহরণ স্বরূপ,

git clone -u /home/you/bin/git-upload-pack you@machine:code

2
তার জন্য ধন্যবাদ. আমি সত্যিই ~ / .bashrc ফাইলটি পরিবর্তন করতে চাইনি।
লুই

2
কেবলমাত্র লক্ষণীয়: এখানে কীভাবে .brcrc এসএসস সেশনে উত্সাহিত করা যায় সে সম্পর্কে নির্দেশাবলী দেওয়া আছে।
sp3ctum

58

ব্রায়ানের উত্তরের ভিত্তিতে ক্লোনিংয়ের পরে নিম্নলিখিত কমান্ডগুলি চালিয়ে আপলোড-প্যাকটি স্থায়ীভাবে সেট করা যেতে পারে, যা --upload-packপরবর্তী টান / আনার অনুরোধের প্রয়োজনীয়তা দূর করে । একইভাবে, রিসিভ-প্যাক সেট --receive-packকরা পুশ অনুরোধগুলির প্রয়োজনীয়তা দূর করে ।

git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack

এই দুটি কমান্ড একটি রেপোতে নিম্নলিখিত লাইন যুক্ত করার সমতুল্য .git/config

[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack

clone -uনিম্নলিখিত ব্যবহারকারীদের ঘন ঘন ব্যবহারকারীরা আগ্রহ প্রকাশ করতে পারেন। মাইক্রোনটি স্ব-ব্যাখ্যামূলক হওয়া উচিত। myfetch / mypull / mypush Repos যার কনফিগ যেমন প্রতিস্থাপন উপরে বর্ণিত পরিবর্তন করা হয়েছে ব্যবহার করা যেতে পারে git pushসঙ্গে git mypush, ইত্যাদি।

[alias]
    myclone = clone --upload-pack /path/to/git-upload-pack
    myfetch = fetch --upload-pack /path/to/git-upload-pack
    mypull  = pull --upload-pack /path/to/git-upload-pack
    mypush  = push --receive-pack /path/to/git-receive-pack

--receive-packবিকল্পটি উল্লেখ করার জন্য ধন্যবাদ git-push!
এক্সেল

1
কনফিগার বিকল্পগুলি উল্লেখ করার জন্য ধন্যবাদ, এটি ব্যবহারকারী-স্থান থেকে একটি দরকারী স্পর্শ।
অরন আহমদিয়া

আমি আপনার পরামর্শটি চেষ্টা করেছিলাম, এছাড়াও। বাশার্কের পথে "যা গিট-রিসিভ-প্যাক" যুক্ত করেছি তবে কোনওভাবেই গিট পুশ আমার পক্ষে কাজ করে না, যদিও রেপো আপলোড ঠিকঠাক কাজ করে। কোন ধারণা কেন এমন হতে পারে?
coredump

@ কর্ড্প্প, "রিমোট.রিগিন.রিসিপপ্যাক" সেট করা আপনার .bashrc এ PATH সংশোধন করার প্রয়োজনীয়তা দূর করতে হবে। git push --receive-pack /full/path/to/git-receive-packএটির চেষ্টা করুন, সফল হওয়া অবধি টুইঙ্ক করুন, তারপরে স্থায়ীভাবে প্রাপ্ত-প্যাকের পথ নির্ধারণ করতে .git / কনফিগার করুন (বা "গিট কনফিগারেশন" চালান) ify
গ্যারেট 18

আপনার প্রতিক্রিয়া জন্য সবাইকে ধন্যবাদ! আমার ক্ষেত্রে ফেচ সার্ভার এবং পুশ সার্ভারটি আলাদা ছিল এবং আনতে সার্ভারের লেখার অনুমতি নেই। যখন আমি গিট পুশ ব্যবহার করি <push-server> <ব্র্যাঙ্ক> সবকিছু ঠিকঠাক কাজ করে।
coredump


12

ম্যাক ওএস এক্স এবং আরও কিছু ইউনিক্স কমপক্ষে সুরক্ষার কারণে ব্যবহারকারী পাথ এসএসডি-তে সংকলিত হয়েছে যাতে আমাদের মধ্যে যারা / ইউএসআর / লোকাল / গিট / {বিন, লিব, ... as হিসাবে গিট ইনস্টল করে গিট হিসাবে সমস্যায় পড়তে পারে এক্সিকিউটেবলগুলি পূর্বনির্ধারিত পথে নয়। এটিকে ওভাররাইড করতে আমি আমার / ইত্যাদি / sshd_config পরিবর্তন সম্পাদনা করতে পছন্দ করি:

#PermitUserEnvironment no

প্রতি

PermitUserEnvironment yes

এবং তারপরে প্রয়োজন অনুযায়ী ~ / .ssh / পরিবেশ ফাইলগুলি তৈরি করুন। আমার গিট ব্যবহারকারীদের তাদের ~ / .ssh / পরিবেশ ফাইলটিতে নিম্নলিখিতগুলি রয়েছে:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin

Note / .ssh / এনভায়রনমেন্ট ফাইলটি পড়লে নোট পরিবর্তনশীল প্রসারণ ঘটে না:

PATH=$PATH:/usr/local/git/bin

কাজ করবে না.


এটি নিখুঁত টিপের মতো মনে হচ্ছে তবে এটি এখানে 10.6.6 এর জন্য কাজ করছে না। ssh ব্যবহারকারী @ হোস্ট প্রতিধ্বনি $ \ পথ এখনও শক্ত কোডড বিল্ড পাথটি দেখায়। অ-প্রসারণযোগ্য প্রয়োজনীয় পথ সহ .ssh / পরিবেশ যুক্ত করুন ded হ্যাঁ হ্যাঁ, পরিবর্তিত / ইত্যাদি / sshd_config পারমিট ইউজার পরিবেশে। কোন পাশা. কোনও পরামর্শ? ধন্যবাদ।
বাবা

এছাড়াও ক্লায়েন্ট মেশিনে BASH_ENV = '~ / .nibashrc' সেট করার চেষ্টা করে এবং এতে প্রসারিত পথ সহ একটি ফাইল তৈরি করার চেষ্টা করেছি। এছাড়াও কোন পাশা।
বাবা

ঠিক আছে. সুতরাং আপনি আমার জন্য কাজ করার জন্য সংযোগ করছেন এমন মেশিনে .bashrc এ পাথ।
বাবা

পরিবর্তনশীল প্রসারণ .ssh / পরিবেশের জন্য কাজ না করার বিষয়ে পরামর্শের জন্য ধন্যবাদ
ডেনিস

বিভিন্ন সম্প্রসারণ কাজ করে কি তা বোঝানোর জন্য আপভোট।
এক্সএমএএন

7

ম্যাট এর সমাধানটি ওএস এক্সে আমার পক্ষে কার্যকর হয়নি, তবে পল তা করেনি।

পলের লিঙ্কটির সংক্ষিপ্ত সংস্করণটি হ'ল:

তৈরী করা হয়েছে /usr/local/bin/ssh_sessionনিম্নলিখিত পাঠ্য সহ:

#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
    export SSH_LOGIN=1
    exec login -fp "$USER"
else
    export SSH_LOGIN=
    [ -r /etc/profile ] && source /etc/profile
    [ -r ~/.profile ] && source ~/.profile
    eval exec "$SSH_ORIGINAL_COMMAND"
fi

এক্সিকিউট:

chmod +x /usr/local/bin/ssh_session

নিম্নলিখিতগুলিতে এতে যুক্ত করুন /etc/sshd_config:

ফোর্সকমন্ড / ইউএসআর / স্থানীয় / বিন / এসএস_অ্যাসিওশন


শুনতে আকর্ষণীয় এটি আপনার পক্ষে কার্যকর হয়নি। রিমোট মেশিনে PATH কী বলেছিল তা বলার কি আপত্তি আছে, আপনি যখন "ssh you @ রিমোট $ $ পথ" চালাতেন?
ম্যাট কার্টিস


5

MsysGit সংস্করণে আমি এই ত্রুটিগুলি পেয়েছি।

আমি এখানে এবং অন্য কোথাও যে সমস্ত পরামর্শ পেতে পারি সেগুলি অনুসরণ করার পরে, আমি শেষ করেছি:

গীটের সাইগউইন সংস্করণ ইনস্টল করা

সার্ভারে (সাইগউইন এসএসএইচডি সহ উইন এক্সপি), এটি শেষ পর্যন্ত এটি ঠিক করে দিয়েছে।

আমি এখনও MsysGit সংস্করণ ক্লায়েন্ট পাশ ব্যবহার

..আসলে, এটি আমার পক্ষে কাজ করার একমাত্র উপায়, যেহেতু আমি একই এসএসডি সার্ভার থেকে সাইগউইন গিটের টানে পসিক্স ত্রুটি পেয়েছি

আমি সন্দেহ করি গিট ব্যবহারের এই দিকে এখনও কিছু কাজ প্রয়োজন ... (উইন্ডোজে এসএসএস + টান / টান সহজ)



1

আপনি অবশ্যই যোগ করতে হবে

export PATH=/opt/git/bin:$PATH

.bashrc এ এই লাইনের আগে:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

অন্যথায় সমস্ত রফতানি বিবৃতি কার্যকর করা হবে না ( এখানে দেখুন )।


1

আমার মামলাটি জিআইটি ব্যাশের সাথে উইন 10 এ রয়েছে এবং আমার কাছে মানক অবস্থানের অধীনে জিআইটি নেই। পরিবর্তে আমার কাছে অ্যাপ্লিকেশন / স্থানীয় / বিনের অধীনে গিট রয়েছে। আমি @ গ্যারেট দ্বারা প্রদত্ত কমান্ডগুলি ব্যবহার করেছি তবে ডাবল /: দিয়ে শুরু করার পথটি পরিবর্তন করা দরকার

git config remote.origin.uploadpack //path/to/git-upload-pack
git config remote.origin.receivepack //path/to/git-receive-pack

অন্যথায় জিআইটি সামনে আপনার উইন্ডোজ জিআইটি পাথ যুক্ত করবে।


0

Zsh এর জন্য আপনাকে এটি এই ফাইলটিতে রাখতে হবে: ~ / .zshenv

উদাহরণস্বরূপ, ওএস এক্সে ম্যাকপোর্টগুলি থেকে গিট-কোর প্যাকেজটি ব্যবহার করে:

cho প্রতিধ্বনি 'রফতানুন PATH = / অপ্ট / স্থানীয় / এসবিন: / অপ্ট / স্থানীয় / বিন: $ প্যাথ'> ~ / .zshenv


0

উইন্ডোজ থেকে এসএসএইচ ব্যবহার করে একটি গিটোলাইট রেপোতে সংযোগ স্থাপন করতে আমার সমস্যা হয়েছে এবং দেখা গেছে যে আমার সমস্যাটি ছিল পিআইপি! এটি আমাকে একটি পাসওয়ার্ড চেয়েছিল, তবে এসএসএস গিটোলাইট @ [হোস্ট] রেপো তালিকাটি জরিমানা ফিরিয়ে আনবে।

আপনার পরিবেশের পরিবর্তনশীল পরীক্ষা করুন: GIT_SSH। যদি এটি প্লিংকে সেট করা থাকে, তবে কোনও মান ছাড়াই এটি চেষ্টা করুন ("GIT_SSH =" সেট করুন) এবং দেখুন এটি কার্যকর কিনা।


0

git-upload-packদূরবর্তী গিট ব্যবহারকারীর .bashrc ফাইলটিতে আপনার অবস্থান যুক্ত করুন।


0

এটি রিমোট হোস্টে গিট ইনস্টল করার মতো সহজ হতে পারে (যেমন এটি আমার ক্ষেত্রে ছিল)।

sudo apt-get install git

বা অন্যান্য প্যাকেজ পরিচালনা সিস্টেমের সমতুল্য।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.