গিটের স্থিতি লাইন শেষ / অভিন্ন ফাইল / উইন্ডোজ এবং লিনাক্স পরিবেশ / ড্রপবক্স / ম্লেড উপেক্ষা করে


112

আমি কিভাবে বানাবো

গিট স্ট্যাটাস

লাইন শেষ পার্থক্য উপেক্ষা করবেন?

পটভূমি তথ্য:

আমি প্রকল্পটিতে কাজ করতে এলোমেলোভাবে উইন্ডোজ এবং লিনাক্স ব্যবহার করি। প্রকল্পটি ড্রপবক্সে রয়েছে।

গিট ডিফারেন্ট লাইনের শেষটিকে কীভাবে উপেক্ষা করবেন সে সম্পর্কে আমি অনেক কিছু পেয়েছি। যেহেতু আমি মেল্ট গিট ডিফ ব্যবহার করি প্রতিটি ফাইলের জন্য মেল্ট খোলে। এবং meld "অভিন্ন ফাইল" বলে।

সুতরাং আমি কীভাবে এড়াতে পারি। গিটের পরিবর্তিত ফাইলগুলির জন্য কেবল মেল্ড খুলতে হবে। এবং গিটের স্থিতি কেবল ফাইলের সমাপ্তি আলাদা হলে ফাইলগুলি পরিবর্তিত হিসাবে প্রতিবেদন করা উচিত নয়।

সম্পাদনা: কারণ:

উইন্ডোজে এই সেটিংটির কারণে এটি ঘটেছিল

core.autocrlf সত্য

তাই আমি লিনাক্সে ওয়ার্কিং কপিটি পরীক্ষা করে দেখেছি এবং উইন্ডোজে কোর.আউটোক্রল্ফ মিথ্যা সেট করেছি।

গিটারের স্ট্যাটাসটি কীভাবে বিভিন্ন নতুন লাইন উপেক্ষা করা যায় তা জেনে এখনও ভাল লাগবে।


3
আপনি যদি বিভিন্ন প্ল্যাটফর্মে ড্রপবক্স ব্যবহার করে ফাইলটি ভাগ করে থাকেন তবে আপনি যদি এমনভাবে সমস্ত ফাইলকে বাইনারি হিসাবে গণ্য করার জন্য গিটকে না বলে থাকেন তবে আপনি এটি ঘটতে চলেছেন। সঠিক সমাধানটি গিট সংগ্রহস্থলের জন্য ড্রপবক্স ব্যবহার না করা
পিটেশ

মনে রাখবেন: stackoverflow.com/questions/2825428/… - এটি কিছুটা সাহায্য করতে পারে
পিটেশ

ড্রপবক্সের সাথে এটি কীভাবে দুর্দান্ত কাজ করে তা আমি খুঁজে পেয়েছি: কোর.আউটোক্রল্ফ মিথ্যা সেট করে
থারস্টেন নিহিউস

3
এএফআইএকি ফাইলকে বাইনারি হিসাবে বিবেচনা করার জন্য গিটকে বলছে যেভাবে ফাইলটি পৃথক করে তার পরিবর্তনেরও পার্শ্ব প্রতিক্রিয়া রয়েছে। যথাযথ সমাধান হ'ল গিটকে লাইনের সমাপ্তি উপেক্ষা করতে বলা। আমার সর্বনিম্ন পছন্দসই জিনিসগুলির মধ্যে 2: লোকেদের
কীভাবে

বাহ, এটি আমাকে কিছুটা সময় নিয়েছিল যে এই সমস্যাটির core.autocrlfমূল কারণ উইন্ডোজ, তবে লিনাক্সের নিরাময়ও cure সমস্যাটি হ'ল autocrlfউইন্ডোজে বৈশ্বিক, এবং রেপোর মধ্যে সেটিংস নেই .git/config। স্থানীয় চালিয়ে git config core.autocrlf trueআমি আমার এনটিএফএসের ওয়ার্কিং কপির উইন্ডোজে ক্লোন করা থাকলেও লিনাক্সে অ্যাক্সেস করাতে প্রফুল্ল পরিবর্তনগুলি থেকে মুক্তি পেয়েছি। (এখন কেবল সিমলিংকের সাথে জালিয়াতিপূর্ণ পরিবর্তন রয়েছে - এনটিএফএস সিমলিংকগুলি ফিউজব্লক মাউন্টগুলিতে ডু ওয়ার্ক করে তবে গিট এগুলিকে পরিবর্তিত হিসাবে দেখছে ...)
টমাসজ গ্যান্ডার

উত্তর:


103

কোর.আউটোক্রল্ফ মানটি এটির মতো করে সেট করার চেষ্টা করুন:

git config --global core.autocrlf true

6
@ থর্স্টননিহহস আমি কোনও কাজের প্রকল্পে সেটিংটি ব্যবহার করি। কাজের সময় আমাকে উইন্ডোজ, হোম আমি ম্যাক এবং লিনাক্স ব্যবহার করি। এর আগে আমার আপনার মতো সমস্যা ছিল, সেটিংয়ের পরে সবকিছু ঠিকঠাক ছিল।
সাšা Šজাক

1
এটি আশ্চর্যজনক কারণ উইন্ডোতে একটি চেকআউটের কেবল লিনাক্সে line r \ n লাইন শেষ হয় \ n ড্রপবক্সে (বা অনুরূপ) আপনার উভয় ওয়ার্কিং-অনুলিপি রয়েছে?
থারস্টন নিহিউস

1
@ থার্স্টননিহিউস না, গিট রিপোজিটরি গিথুবে রয়েছে। হুম, সম্ভবত ড্রপবক্সটি কোনওক্রমে লাইন শেষ হওয়ার সাথে সাথে স্ক্রু করছে যখন এটি ফাইলগুলি সিঙ্ক করে? গিটের জন্য ড্রপবক্স ব্যবহার করা অদ্ভুত বলে মনে হচ্ছে না। বিটবাকেট ব্যবহার করার চেষ্টা করুন (এটিতে নিখরচায় ব্যক্তিগত সংগ্রহস্থল রয়েছে), কেবল একটি ছোট রেপো তৈরি করুন এবং কয়েকটি ছোট টেক্সট ফাইল দিয়ে আপনার 2 মেশিনে পরীক্ষা করুন।
সাšা Šজাক

1
১. ওয়ার্কিং কপি এবং লোকাল রেপো ড্রপবক্সে রয়েছে (আমার কোনও পাবলিক
স্টোরের

3
উইন্ডোজ ইন: core.autocrlf trueসাইগউইন একটি কাজ সেটিংস। core.safecrlf falseগিট ব্যাশ বা
মিংডব্লিউ-

43

পরিবর্তে .gitattributes নিম্নলিখিত সেটিংস ব্যবহার করুন:

# Ignore all differences in line endings
*        -crlf

.gitattributes আপনার গ্লোবাল .gitconfig হিসাবে একই ডিরেক্টরিতে পাওয়া যাবে। .Gitattributes যদি বিদ্যমান না থাকে তবে এটিকে ডিরেক্টরিতে যুক্ত করুন। .Gitattributes যুক্ত / পরিবর্তন করার পরে বিদ্যমান ফাইলগুলিতে পরিবর্তনগুলি সফলভাবে প্রয়োগ করতে আপনাকে সংগ্রহস্থলের একটি হার্ড রিসেট করতে হবে।


এটি আমার জন্য একটি স্ট্রিমে কাজ করেছে, কিন্তু যখন আমি একই প্রকল্পের জন্য অন্য স্ট্রিমে এটি তৈরি করার চেষ্টা করেছি তখনও এটি নিউলাইন পার্থক্য দেখায়।
pfernandom

1
@ স্পারনডম, আপনার প্রকল্পে কি সম্ভবত একাধিক .গিটট্রিবিউটস রয়েছে? এটি প্রথমে সর্বাধিক "স্থানীয়" সংস্করণটি দেখবে, সুতরাং আপনার যদি স্থানীয় ডিরেক্টরিতে ফাইল রয়েছে যেখানে এটি রয়েছে, এটি আপনার প্রজেক্টের উপরের একটিটিকে ব্যবহার করবে।
ট্র্যাশম্যান

-ক্রফের আগে 8 টি স্পেস থাকা দরকার?
ইগোনাতো

কোনও বিষয় নয়
ট্র্যাশম্যান

এটি কেবল লাইনের শেষটিকে উপেক্ষা করার চেয়ে আরও বেশি কিছু করে git status। এটি প্রকৃতপক্ষে পরিবর্তন করে যে কীভাবে ফাইলগুলি সংগ্রহস্থলে পরীক্ষা করা হয়। রেফ: git-scm.com/docs/gitattributes#_code_text_code
ভিনস

31

এই উত্তরটি প্রাসঙ্গিক বলে মনে হয় যেহেতু ওপি মাল্টি-ওএস সমাধানের প্রয়োজনের জন্য রেফারেন্স তৈরি করে। এই গিথুব নিবন্ধের ক্রস-ওএস-এর শেষের জন্য হ্যান্ডলিংয়ের জন্য উপলব্ধ নিবন্ধের বিশদটি সহায়তা করে details ক্রস-ওএস লাইন শেষগুলি পরিচালনা করার জন্য বিশ্বব্যাপী এবং প্রতি-রেপো পদ্ধতি রয়েছে।

গ্লোবাল অ্যাপ্রোচ

লিনাক্স বা ওএস এক্সে হ্যান্ডলিং গিট লাইন এন্ডিংগুলি কনফিগার করুন:

git config --global core.autocrlf input

উইন্ডোজে গিট লাইন এন্ডিং হ্যান্ডলিং কনফিগার করুন:

git config --global core.autocrlf true

প্রতি-রেপো পদ্ধতি:

আপনার রেপোয়ের মূলে, একটি .gitattributesফাইল তৈরি করুন এবং আপনার প্রকল্পের ফাইলগুলির জন্য লাইন শেষের সেটিংস সংজ্ঞায়িত করুন, নিম্নলিখিত বিন্যাসে একসাথে এক লাইন: নীচের একটি path_regex line-ending-settingsযেখানে line-ending-settings:

  • পাঠ
  • বাইনারি (ফাইলগুলি যে গিটের জন্য লাইন শেষগুলি সংশোধন করা উচিত নয় - কারণ এটি কিছু চিত্রের ধরণের কারণ যেমন পিএনজি ব্রাউজারে রেন্ডার না করতে পারে)

textমান কিভাবে ম্যাচিং ফাইলের জন্য লাইন শেষা w শ হ্যান্ডেল করতে উপর গীত নির্দেশ আরও কনফিগার করা যাবে:

  • text - ওএস নেটিভ লাইন সমাপ্তিতে লাইনের শেষ পরিবর্তন হয়।
  • text eol=crlf- লাইনের শেষটিকে CRLFচেকআউটে রূপান্তর করে।
  • text eol=lf- লাইনের শেষটিকে LFচেকআউটে রূপান্তর করে।
  • text=auto - বোধগম্য ডিফল্ট যা গিটের বিচক্ষণতার সাথে লাইন হ্যান্ডেল ছেড়ে দেয়।

এখানে একটি নমুনা .gitattributes ফাইলের সামগ্রী:

# Set the default behavior for all files.
* text=auto

# Normalized and converts to 
# native line endings on checkout.
*.c text
*.h text

# Convert to CRLF line endings on checkout.
*.sln text eol=crlf

# Convert to LF line endings on checkout.
*.sh text eol=lf

# Binary files.
*.png binary
*.jpg binary

আরো কিভাবে লাইন শেষা w শ সেটিংস পরিবর্তন করার পর আপনার রেপো রিফ্রেশ করতে উপর এখানে । Tldr:

গিটের সাথে আপনার ফাইলগুলি ব্যাকআপ করুন, আপনার সংগ্রহস্থলের প্রতিটি ফাইল মুছে দিন (.git ডিরেক্টরি ব্যতীত) এবং তারপরে সমস্ত ফাইল একবারে পুনরুদ্ধার করুন। গিটে আপনার বর্তমান ফাইলগুলি সংরক্ষণ করুন, যাতে আপনার কোনও কাজই হারাতে না পারে।

git add . -u

git commit -m "Saving files before refreshing line endings"

সূচকটি সরান এবং গিটকে কার্যকারী ডিরেক্টরিটি পুনরায় ছাড়তে বাধ্য করুন।

rm .git/index

সমস্ত নতুন লাইন শেষ করতে গিট সূচকটি পুনরায় লিখুন।

git reset

পুনরায় লিখিত, সাধারণ ফাইলগুলি দেখান।

কিছু ক্ষেত্রে, এটি করা দরকার। অন্যদের নিম্নলিখিত অতিরিক্ত পদক্ষেপগুলি পূরণ করার প্রয়োজন হতে পারে:

git status

আপনার সমস্ত পরিবর্তিত ফাইলগুলি আবার যুক্ত করুন এবং সেগুলি প্রতিশ্রুতিবদ্ধ করার জন্য প্রস্তুত করুন। কোন ফাইলগুলি অপরিবর্তিত ছিল তা খতিয়ে দেখার এই সুযোগ।

git add -u

এখানে প্রচুর বার্তাগুলি দেখতে সম্পূর্ণ নিরাপদ যা "সতর্কতা" পড়ে: সিআরএলএফ ফাইলটিতে এলএফ দ্বারা প্রতিস্থাপিত হবে।

.Gitattributes ফাইলটি পুনরায় লিখুন।

git add .gitattributes

আপনার ভাণ্ডারে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।

git commit -m "Normalize all the line endings"


18

উইন্ডোজ অপারেটিং সিস্টেমে গিট কমান্ড সম্পর্কিত সমস্যা :

$ git add --all

সতর্কতা: এলএফ সিআরএলএফ দ্বারা প্রতিস্থাপন করা হবে ...

আপনার কার্যক্ষম ডিরেক্টরিতে ফাইলটির মূল লাইন শেষ থাকবে।

রেজোলিউশন :

$ git config --global core.autocrlf false     
$ git add --all 

কোনও সতর্কতা বার্তা আসে না।


আপনি যে সমস্ত ওএস ব্যবহার করছেন তাতে এটি করা উচিত, যেমন: উইন্ডো এবং লিনাক্সে। প্রতিটি ওএসের নিজস্ব গ্লোবাল .git / কনফিগার ফাইল রয়েছে, তাই আপনাকে সেই সেটিংসকে একত্রে তৈরি করতে হবে। এই কারণেই @ থার্সটন আপনার সমস্যা ছিল। তবে আমি মিথ্যাটির পরিবর্তে পতাকাটি সত্যে সেট করে দিয়েছি।
ইমানুয়েল মাহুনি

এই সমাধানটি লিনাক্সেও কাজ করে (@ সাসাইজাক উত্তরটি আমার পক্ষে কাজ করে না)
জুলিওসার

4

লাইন শেষের পার্থক্য উপেক্ষা করার জন্য আমি একটি স্ক্রিপ্ট তৈরি করেছি:

এটি সেই ফাইলগুলি প্রদর্শন করবে যা প্রতিশ্রুতিবদ্ধ তালিকায় যুক্ত হয়নি এবং সংশোধিত হয়েছিল (লাইন শেষের মধ্যে পার্থক্য উপেক্ষা করার পরে)। আপনার প্রতিশ্রুতিতে এই ফাইলগুলি যুক্ত করতে আপনি যুক্তি যুক্ত করতে পারেন "অ্যাড"।

#!/usr/bin/perl

# Usage: ./gitdiff.pl [add]
#    add : add modified files to git

use warnings;
use strict;

my ($auto_add) = @ARGV;
if(!defined $auto_add) {
    $auto_add = "";
}

my @mods = `git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-`;
chomp(@mods);
for my $mod (@mods) {
    my $diff = `git diff -b $mod 2>/dev/null`;
    if($diff) {
        print $mod."\n";
        if($auto_add eq "add") {
            `git add $mod 2>/dev/null`;
        }
    }
}

উত্স কোড: https://github.com/lepe/scriptts/blob/master/gitdiff.pl

আপডেটগুলি :

  • evandro777 দ্বারা স্থির করুন: যখন ফাইলের ফাইল নাম বা ডিরেক্টরিতে স্থান থাকে

ধন্যবাদ! আমি আসল পার্থক্য পেতে পারে যে একমাত্র উপায়। এই ত্রুটিটি দেখিয়ে 3 লাইন মুদ্রিত হওয়া নিয়েই কেবল একটি সমস্যা হয়েছে: শ: 1: সিনট্যাক্স ত্রুটি:
নিরঙ্কিত

1
স্ক্রিপ্ট সমস্যার সমাধানের জন্য সমস্যা: সমস্যা: যখন ফাইলের নাম ফাইল ডিরেক্টরিতে ফাইলের স্থান থাকে, গিটটি "" ব্যবহার করবে, সুতরাং স্ক্রিপ্টটি ভেঙে যায়। এই লাইনটি পরিবর্তন করার ফিক্সটি হ'ল: আমার @ মোডস = git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'; এটিতে: আমার @ আধুনিক = git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-;
evandro777

@ evandro777: ধন্যবাদ! উত্তর এবং গিট কোড দুটিই আপডেট করেছি।
Lepe

3

আমি উইন্ডোজ এবং লিনাক্স উভয়ই ব্যবহার করি, তবে সমাধানটি core.autocrlf trueআমার কাজে দেয় নি। এমনকি আমি কিছু পরে পরিবর্তন করা হয়নি git checkout <filename>

সুতরাং আমি বিকল্প হিসাবে workaround ব্যবহার git status-gitstatus.sh

#!/bin/bash

git status | grep modified | cut -d' ' -f 4 | while read x; do
 x1="$(git show HEAD:$x | md5sum | cut -d' ' -f 1 )"
 x2="$(cat $x | md5sum | cut -d' ' -f 1 )"

 if [ "$x1" != "$x2" ]; then
    echo "$x NOT IDENTICAL"
 fi
done

আমি কেবল md5sumএকটি ফাইল এবং তার ভাইয়ের সংগ্রহস্থলের সাথে তুলনা করি ।

উদাহরণ আউটপুট:

$ ./gitstatus.sh
application/script.php NOT IDENTICAL
application/storage/logs/laravel.log NOT IDENTICAL

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