"এইচজি বিড়াল" বা "এসএনএন বিড়াল" এর গিটের সমান


84

আমি গিট সংগ্রহস্থলে রাখা একটি ফাইলের সর্বশেষ সংস্করণটির একটি অনুলিপি বের করতে এবং কিছু প্রক্রিয়াজাতকরণের জন্য এটি কোনও স্ক্রিপ্টে পাস করতে চাই। এসএনএন বা এইচজি সহ আমি কেবল "বিড়াল" কমান্ডটি ব্যবহার করি:

নির্দিষ্ট ফাইলগুলি প্রদত্ত সংশোধন হিসাবে সেগুলি মুদ্রণ করুন। যদি কোনও পুনর্বিবেচনা না দেওয়া হয় তবে কার্যকরী ডিরেক্টরিটির পিতামাতার ব্যবহার করা হয়, বা কোনও সংশোধন পরীক্ষা না করা থাকলে টিপ দিন।

(এটি এইচজি ডকুমেন্টেশনে hg বিড়ালের বর্ণনা থেকে এসেছে)

গিট দিয়ে এটি করার সমতুল্য আদেশ কি?


4
আমার চূড়ান্ত সমাধানটি হ'ল প্রথমে "গিট এলএস-ফাইলগুলি - পুরো নাম <ফিলিপথ" "সংগ্রহস্থলের শীর্ষের সাথে সম্পর্কিত পুরো পথটি পেতে এবং তারপরে" গিট শো হেড: <পূর্ণ ফাইলপথ> "
রিচার্ড বাউলটন


উত্তর:


113
git show rev:path/to/file

রেভ যেখানে রিভিশন হয়।

গিট এবং এসএনএন কমান্ডের তুলনা করার জন্য http://git.or.cz/course/svn.html দেখুন ।


4
এটি আমার পক্ষে কাজ করে, হ্যাঁ! (পুনর্নির্মাণ হিসাবে হেড ব্যবহার করে) আমার মনে হয় আমার সংগ্রহস্থলের শীর্ষের সাথে সম্পর্কিত পাথটি ব্যবহার করা দরকার যা কিছুটা ব্যথা হলেও কার্যক্ষম।
রিচার্ড বোলটন

@ রিচার্ড বোল্টন: ট্যাব সম্পূর্ণতা ব্যবহার করা হলে এটি কম বেদনাদায়ক
কেএস 1322

@ পিমলোটক। / - ছাড়া আমার পক্ষে ভাল কাজ করেছেন - সম্ভবত গিট সংস্করণের উপর নির্ভরশীল
ট্রেজকাজ

9

এখানে "গিট ক্যাট-ফাইল" রয়েছে যা আপনি এভাবে চালাতে পারেন:

$ git cat-file blob v1.0:path/to/file

যেখানে আপনি শাখা, ট্যাগ করতে বা SHA করতে চান সেটির সাথে 'v1.0' প্রতিস্থাপন করতে পারেন এবং তারপরে 'পাথ / টু / ফাইল' os আপনি চাইলে সামগ্রীর আকার দেখতে '-s'ও পাস করতে পারেন।

আপনার ব্যবহৃত 'ক্যাট' কমান্ডের খুব কাছাকাছি থাকতে পারে যদিও পূর্বে উল্লিখিত 'শো' একই জিনিসটি অনেক কিছু করবে।


6

git showআপনি যে আদেশটি সন্ধান করছেন তা। ডকুমেন্টেশন থেকে:

   git show next~10:Documentation/README
          Shows the contents of the file Documentation/README as they were
          current in the 10th last commit of the branch next.

এটি কাজ করছে বলে মনে হচ্ছে না: "গিটার শো পরবর্তী ~ 1: README" চালানো মারাত্মক: দ্ব্যর্থহীন যুক্তি 'পরের ~ 1: README': অজানা সংশোধন বা পথ কার্যকর গাছের মধ্যে নেই। পুনর্বিবেচনাগুলি থেকে পাথ পৃথক করতে '-' ব্যবহার করুন
রিচার্ড বোলটন

4
আপনার 'পরের' নামে একটি শাখা আছে? আপনি যদি বর্তমান শাখাটি চান তবে পরিবর্তে 'শিরোনাম' ব্যবহার করুন।
অ্যান্ড্রু আইলেট

3

শাখার নামগুলির সাথেও কাজ করুন (1 ম পৃষ্ঠায় শিরোনামের মতো):

git show $branch:$filename


2

আমি একটি গিট বিড়াল শেল স্ক্রিপ্ট লিখেছি, যা গিথুব-এ রয়েছে


4
এর জন্য কোডটি সন্ধান করা সহায়ক ছিল, যদিও আমি একটি স্বতন্ত্র পাইথন স্ক্রিপ্ট চেয়েছিলাম এবং গিট বিড়ালের সমস্ত বৈশিষ্ট্যের প্রয়োজন নেই। ধন্যবাদ
রিচার্ড বোলটন

1

সরাসরি বিকল্প বলে মনে হচ্ছে না । এই ব্লগ এন্ট্রিতে সর্বশেষ প্রতিশ্রুতি নির্ধারণ করে, তারপরে সেই প্রতিশ্রুতিবদ্ধ ফাইলটির জন্য হ্যাশ নির্ধারণ করে এবং তারপরে এটি ছড়িয়ে দেওয়ার মাধ্যমে কীভাবে সমতুল্য করতে হবে তার বিশদ রয়েছে ।

git log ...
git ls-tree ...
git show -p ...

(ব্লগ এন্ট্রিটিতে কমান্ডের সাথে টাইপগুলি রয়েছে এবং উপরেরটি ব্যবহার করা হয় svn)


টাইপগুলি সত্ত্বেও ব্লগ এন্ট্রি সহায়ক ছিল।
রিচার্ড বাউলটন

0

কোনও git showপ্রস্তাবনা সত্যই সন্তুষ্ট নয় কারণ (আমি যেমন চেষ্টা করবো), আউটপুট থেকে শীর্ষে মেটাডাটা ক্রাফ্ট না পাওয়ার কোনও উপায় আমি খুঁজে পাচ্ছি না। বিড়ালের স্পিরিট (1) কেবলমাত্র বিষয়বস্তু প্রদর্শন করা। এটি (নীচে) একটি ফাইলের নাম এবং একটি alচ্ছিক নম্বর নেয়। সংখ্যাটি কীভাবে আপনি ফিরে যেতে চান তা প্রতিশ্রুতি দেয়। (সেই ফাইলগুলি পরিবর্তন করে যে কমিটিগুলি Comm লক্ষ্য ফাইলটি পরিবর্তন করে না এমন কমিট গণনা করা হয় না))

gitcat.pl filename.txt
gitcat.pl -3 filename.txt

filename.txt এর সর্বশেষ প্রতিশ্রুতি হিসাবে ফাইলনাম.টেক্সট এর সামগ্রীগুলি এবং এর আগে 3 টি কমিট থেকে লিখিত সামগ্রীগুলি দেখায়।

#!/usr/bin/perl -w

use strict;
use warnings;
use FileHandle;
use Cwd;

# Have I mentioned lately how much I despise git?

(my $prog = $0) =~ s!.*/!!;
my $usage = "Usage: $prog [revisions-ago] filename\n";

die( $usage ) if( ! @ARGV );
my( $revision, $fname ) = @ARGV;

if( ! $fname && -f $revision ) {
    ( $fname, $revision ) = ( $revision, 0 );
}

gitcat( $fname, $revision );

sub gitcat {
    my( $fname, $revision ) = @_;

    my $rev = $revision;
    my $file = FileHandle->new( "git log --format=oneline '$fname' |" );

    # Get the $revisionth line from the log.
    my $line;
    for( 0..$revision ) {
        $line = $file->getline();
    }

    die( "Could not get line $revision from the log for $fname.\n" ) 
        if( ! $line );

    # Get the hash from that.
    my $hash = substr( $line, 0, 40 );
    if( ! $hash =~ m/ ^ ( [0-9a-fA-F]{40} )/x ) {
        die( "The commit hash does not look a hash.\n" );
    }

    # Git needs the path from the root of the repo to the file because it can
    # not work out the path itself.
    my $path = pathhere();
    if( ! $path ) {
        die( "Could not find the git repository.\n" );
    }

    exec( "git cat-file blob $hash:$path/'$fname'" );
}


# Get the path from the git repo to the current dir.
sub pathhere {
    my $cwd = getcwd();
    my @cwd = split( '/', $cwd );
    my @path;

    while( ! -d "$cwd/.git" ) {
        my $path = pop( @cwd );
        unshift( @path, $path );
        if( ! @cwd ) {
            die( "Did not find .git in or above your pwd.\n" );
        }
        $cwd = join( '/', @cwd );
    }
    return join( '/', map { "'$_'"; } @path );
}

0

যারা ব্যাশ ব্যবহার করছেন তাদের জন্য নিম্নলিখিত একটি কার্যকর ফাংশন:

gcat () { if [ $# -lt 1 ]; then echo "Usage: $FUNCNAME [rev] file"; elif [ $# -lt 2 ]; then git show HEAD:./$*; else git show $1:./$2; fi }

এটি আপনার .bashrcফাইলে রাখুন (আপনি বাদে অন্য যে কোনও নাম ব্যবহার করতে পারেন gcat

ব্যবহারের উদাহরণ:

> gcat
Usage: gcat [rev] file

বা

> gcat subdirectory/file.ext

বা

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