git - একটি "গিট রপ্তানি"(যেমন "svn রপ্তানি") করবেন?




export git-archive (20)

আমি একটি ভাল "গিট এক্সপোর্ট" সমাধান আছে কিনা তা নিয়ে অবাক হয়েছি যে। .git রিপোজিটরি ডিরেক্টরি ছাড়াই একটি গাছের একটি অনুলিপি তৈরি করে। অন্তত তিনটি পদ্ধতি আমি জানি:

  1. git clone .git রিপোজিটরি ডিরেক্টরি অপসারণ করে অনুসরণ করে।
  2. git checkout-index এই কার্যকারিতাটির সাথে সংযোজন করে তবে "সূচিপত্রের মধ্যে কেবলমাত্র পছন্দসই গাছটি পড়ুন ..." দিয়ে শুরু হয় যা আমি সম্পূর্ণভাবে নিশ্চিত করতে পারি না।
  3. git-export একটি তৃতীয় পক্ষের স্ক্রিপ্ট যা মূলত একটি অস্থায়ী অবস্থানের মধ্যে একটি git clone করে যা অনুসরণ করে rsync --exclude='.git' চূড়ান্ত গন্তব্যে।

এই সমাধানগুলির মধ্যে কোনটি সত্যিই সন্তোষজনক হিসাবে আমাকে ধর্মঘট। svn export বিকল্প 1 হতে পারে, কারণ উভয়কেই প্রথমে লক্ষ্য ডিরেক্টরিটি খালি রাখতে হবে। কিন্তু বিকল্প 2 আরও ভাল বলে মনে হচ্ছে, আমি অনুমান করতে পারি যে সূচীতে একটি গাছ পড়ার অর্থ কী তা বোঝা যায়।


আপনি submodules সঙ্গে কাজ করে যে কিছু চাই যদি এটি একটি যেতে মূল্য হতে পারে।

বিঃদ্রঃ:

  • MASTER_DIR = আপনার submodules সঙ্গে একটি চেকআউট চেক আউট
  • DEST_DIR = যেখানে এই রপ্তানি শেষ হবে
  • আপনি যদি rsync আছে, আমি মনে করি আপনি কম বল ব্যথা সঙ্গে একই জিনিস করতে সক্ষম হবেন।

অনুমিতি:

  • আপনাকে এটি MASTER_DIR এর অভিভাবক ডিরেক্টরি থেকে চালানো দরকার (অর্থাত MASTER_DIR সিডি থেকে ..)
  • DEST_DIR তৈরি করা হয়েছে বলে অনুমিত হয়। আপনি যদি চেয়েছিলেন তবে একটি DEST_DIR তৈরি করার জন্য এটি সংশোধন করা খুব সহজ

সিডি MASTER_DIR && tar-zcvf ../DEST_DIR/export.tar.gz - exclude = '। git *'। && cd ../DEST_DIR/ && tar xvfz export.tar.gz && rm export.tar.gz


আপনি জিপ ফাইল হিসাবে কোন commit একটি রিমোট রেপো সংরক্ষণাগার করতে পারেন।

git archive --format=zip --output=archive.zip [email protected]:PROJECTNAME.git HASHOFGITCOMMIT

আমি git-checkout-index চারপাশে একটি সাধারণ মোড়ক লিখেছি যা আপনি এইভাবে ব্যবহার করতে পারেন:

git export ~/the/destination/dir

গন্তব্য ডিরেক্টরি ইতিমধ্যে বিদ্যমান থাকলে, আপনাকে -f বা --force যুক্ত করতে হবে।

ইনস্টলেশন সহজ; শুধু আপনার PATH মধ্যে স্ক্রিপ্ট কোথাও ড্রপ, এবং এটি এক্সিকিউটেবল নিশ্চিত করুন।

git-export জন্য github সংগ্রহস্থল


আমি কি 2 বিকল্প মানে খুঁজে পাওয়া যায় নি। একটি সংগ্রহস্থল থেকে, আপনি করতে পারেন:

git checkout-index -a -f --prefix=/destination/path/

পাথের শেষে স্ল্যাশটি গুরুত্বপূর্ণ, নাহলে এটি 'পথ' এর উপসর্গ সহ ফাইলগুলিতে / গন্তব্যের মধ্যে স্থাপিত হবে।

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

-a পতাকাটি সূচীর সমস্ত ফাইল পরীক্ষা করার প্রয়োজন হয় (আমি এই অবস্থানে এই পতাকাটিকে বাদ দেওয়ার অর্থ কী তা নিশ্চিত নই, কারণ এটি আমার যা চায় তা করে না)। -f ফ্ল্যাগ বাহিনী আউটপুটের যে কোনও বিদ্যমান ফাইলকে ওভাররাইট করছে, যা এই কমান্ডটি সাধারণত করে না।

এই ধরণের "গিট এক্সপোর্ট" আমি দেখতে ছিল বলে মনে হচ্ছে।


আমি শুধু আপনি যে ক্ষেত্রে নির্দেশ করতে চান

  1. রিপোজিটরির একটি সাব ফোল্ডার এক্সপোর্ট করা (যেভাবে আমি SVN এক্সপোর্ট বৈশিষ্ট্যটি ব্যবহার করতে ব্যবহৃত হয়েছিল)
  2. যে ফোল্ডার থেকে স্থাপনার গন্তব্য থেকে সবকিছু অনুলিপি সঙ্গে ঠিক আছে
  3. এবং আপনি ইতিমধ্যে জায়গায় সম্পূর্ণ সংগ্রহস্থল একটি কপি আছে।

তারপরে আপনি উল্লিখিত git-archive master foo | -x -C [destination] পরিবর্তে cp foo [destination] ব্যবহার করতে পারেন git-archive master foo | -x -C [destination]


একটি জিট রেপোজিটরি রপ্তানি করার উপায় খোঁজার সময় আমি এই পৃষ্ঠাটি ঘন ঘন আঘাত করেছি। এই প্রশ্নের আমার উত্তরটি তিনটি বৈশিষ্ট্য বিবেচনা করে যা svn এক্সপোর্টটি গিটের তুলনায় নকশা দ্বারা আছে, যেহেতু svn একটি কেন্দ্রীভূত সংগ্রহস্থল পদ্ধতি অনুসরণ করে:

  • এটি সমস্ত পুনর্বিবেচনা এক্সপোর্ট না করে একটি দূরবর্তী সংগ্রহস্থলে অবস্থানের ট্র্যাফিককে কমিয়ে দেয়
  • এটি রপ্তানি ডিরেক্টরির মধ্যে মেটা তথ্য অন্তর্ভুক্ত করা হয় না
  • SVN ব্যবহার করে একটি নির্দিষ্ট শাখা রপ্তানি সঠিক পথ নির্দিষ্ট করে সম্পন্ন করা হয়

    git clone --depth 1 --branch master git://git.somewhere destination_path
    rm -rf destination_path/.git
    

একটি নির্দিষ্ট রিলিজ তৈরি করার সময় এটি একটি স্থিতিশীল শাখা ক্লোন করতে উদাহরণস্বরূপ - --branch stable বা --branch release/0.9


এটি ফাইলগুলিকে একটি সীমা ফাইলে (সি থেকে জি) সীমাতে অনুলিপি করবে। দ্রষ্টব্য: এই শুধুমাত্র ফাইল commited পাবেন। পুরো সংগ্রহস্থল না। সামান্য পরিবর্তন Here থেকে

উদাহরণ Commit ইতিহাস

A -> B -> C -> D -> E -> F -> G -> H -> আমি

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT C~..G | xargs tar -rf myTarFile.tar

Here

-আর -> উপ-গাছ মধ্যে recurse

--no-commit-id -> জিট diff-tree প্রয়োগযোগ্য আইডি আইডি দিয়ে একটি লাইন আউটপুট। এই পতাকা কমিটির আইডি আউটপুট দমন।

--name-only -> পরিবর্তিত ফাইলগুলির নামগুলি দেখান।

--diff-filter = ACMRT -> শুধুমাত্র এই ফাইল নির্বাচন করুন। ফাইল সম্পূর্ণ তালিকা জন্য এখানে দেখুন

C..G -> এই সীমার মধ্যে ফাইল

সি ~ -> Commit সি থেকে ফাইলগুলি অন্তর্ভুক্ত করুন Commit সি থেকে কেবল ফাইল নয়।

| xargs tar -rf myTarFile -> টিপ আউটপুট


এটি সমস্ত সামগ্রী অনুলিপি করবে, বিয়োগ ফাইলগুলি বিয়োগ করবে। আমি git ক্লোন প্রকল্পগুলি আমার ওয়েব অ্যাপ্লিকেশনের গিট রেপোতে .git স্টাফ ছাড়া এক্সপোর্ট করতে ব্যবহার করি।

cp -R ./path -to-git-repo / পাথ / থেকে / গন্তব্য /

সামান্য পুরাতন bash শুধু মহান কাজ করে :)


ক্লোন হিসাবে সহজ হিসাবে .git ফোল্ডার মুছে দিন:

git clone url_of_your_repo path_to_export && rm -rf path_to_export/.git


গিট-রপ্তানি ব্যাশ-বাস্তবায়ন।

আমি 'git-archive' বাস্তবায়ন (পরে পোস্ট করা হবে) এ তাদের পুনরায় ব্যবহার করার উদ্দেশ্যে, তাদের নিজস্ব ফাংশনে .empty ফাইল তৈরি এবং অপসারণ প্রক্রিয়াগুলি ভাগ করে নিয়েছি।

লক্ষ্য রপ্তানি ফোল্ডার থেকে অ-চেয়েছিলেন ফাইলগুলি সরাতে আমি প্রক্রিয়াটিতে '। Gitattributes' ফাইলটি যুক্ত করেছি। 'গিট-এক্সপোর্ট' ফাংশনটি আরও কার্যকরী করার সময় প্রক্রিয়াটির অন্তর্গত অন্তর্নিহিততা।

"। খালি" EMPTY_FILE =;

function create_empty () {
## Processing path (target-dir):
    TRG_PATH="${1}";
## Component(s):
    EXCLUDE_DIR=".git";
echo -en "\nAdding '${EMPTY_FILE}' files to empty folder(s): ...";
    find ${TRG_PATH} -not -path "*/${EXCLUDE_DIR}/*" -type d -empty -exec touch {}/${EMPTY_FILE} \;
#echo "done.";
## Purging SRC/TRG_DIRs variable(s):
    unset TRG_PATH EMPTY_FILE EXCLUDE_DIR;
    return 0;
  }

declare -a GIT_EXCLUDE;
function load_exclude () {
    SRC_PATH="${1}";
    ITEMS=0; while read LINE; do
#      echo -e "Line [${ITEMS}]: '${LINE%%\ *}'";
      GIT_EXCLUDE[((ITEMS++))]=${LINE%%\ *};
    done < ${SRC_PATH}/.gitattributes;
    GIT_EXCLUDE[${ITEMS}]="${EMPTY_FILE}";
## Purging variable(s):
    unset SRC_PATH ITEMS;
    return 0;
  }

function purge_empty () {
## Processing path (Source/Target-dir):
    SRC_PATH="${1}";
    TRG_PATH="${2}";
echo -e "\nPurging Git-Specific component(s): ... ";
    find ${SRC_PATH} -type f -name ${EMPTY_FILE} -exec /bin/rm '{}' \;
    for xRULE in ${GIT_EXCLUDE[@]}; do
echo -en "    '${TRG_PATH}/{${xRULE}}' files ... ";
      find ${TRG_PATH} -type f -name "${xRULE}" -exec /bin/rm -rf '{}' \;
echo "done.'";
    done;
echo -e "done.\n"
## Purging SRC/TRG_PATHs variable(s):
    unset SRC_PATH; unset TRG_PATH;
    return 0;
  }

function git-export () {
    TRG_DIR="${1}"; SRC_DIR="${2}";
    if [ -z "${SRC_DIR}" ]; then SRC_DIR="${PWD}"; fi
    load_exclude "${SRC_DIR}";
## Dynamically added '.empty' files to the Git-Structure:
    create_empty "${SRC_DIR}";
    GIT_COMMIT="Including '${EMPTY_FILE}' files into Git-Index container."; #echo -e "\n${GIT_COMMIT}";
    git add .; git commit --quiet --all --verbose --message "${GIT_COMMIT}";
    if [ "${?}" -eq 0 ]; then echo " done."; fi
    /bin/rm -rf ${TRG_DIR} && mkdir -p "${TRG_DIR}";
echo -en "\nChecking-Out Index component(s): ... ";
    git checkout-index --prefix=${TRG_DIR}/ -q -f -a
## Reset: --mixed = reset HEAD and index:
    if [ "${?}" -eq 0 ]; then
echo "done."; echo -en "Resetting HEAD and Index: ... ";
        git reset --soft HEAD^;
        if [ "${?}" -eq 0 ]; then
echo "done.";
## Purging Git-specific components and '.empty' files from Target-Dir:
            purge_empty "${SRC_DIR}" "${TRG_DIR}"
          else echo "failed.";
        fi
## Archiving exported-content:
echo -en "Archiving Checked-Out component(s): ... ";
        if [ -f "${TRG_DIR}.tgz" ]; then /bin/rm ${TRG_DIR}.tgz; fi
        cd ${TRG_DIR} && tar -czf ${TRG_DIR}.tgz ./; cd ${SRC_DIR}
echo "done.";
## Listing *.tgz file attributes:
## Warning: Un-TAR this file to a specific directory:
        ls -al ${TRG_DIR}.tgz
      else echo "failed.";
    fi
## Purgin all references to Un-Staged File(s):
   git reset HEAD;
## Purging SRC/TRG_DIRs variable(s):
    unset SRC_DIR; unset TRG_DIR;
    echo "";
    return 0;
  }

আউটপুট:

$ git-export /tmp/rel-1.0.0

ফোল্ডার খুলতে '.empty' ফাইল যোগ করা হচ্ছে: ... সম্পন্ন।

চেক আউট আউট সূচক উপাদান (গুলি): ... সম্পন্ন।

হেড এবং সূচী রিসেট: ... সম্পন্ন।

গিট-নির্দিষ্ট উপাদান পার্গিং: ...

'/tmp/rel-1.0.0/{.buildpath}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.project}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.gitignore}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.git}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.gitattributes}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{*.mno}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{*~}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.*~}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{*.swp}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{*.swo}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.DS_Store}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.settings}' ফাইল ... সম্পন্ন। '

'/tmp/rel-1.0.0/{.empty}' ফাইল ... সম্পন্ন। '

সম্পন্ন.

আর্কাইভ চেক আউট আউট উপাদান (গুলি): ... সম্পন্ন।

-আরওয়াই-র - আর - 1 অ্যাডমিন চাকা 25445901 3 নভেম্বর 12:57 /tmp/rel-1.0.0.tgz

আমি এখন 'create_empty' ফাংশন এবং অন্যান্য বৈশিষ্ট্যগুলি ব্যবহার করে এমন একটি প্রক্রিয়াতে 'গিট সংরক্ষণাগার' কার্যকারিতাটি অন্তর্ভুক্ত করেছি।

function git-archive () {
    PREFIX="${1}"; ## sudo mkdir -p ${PREFIX}
    REPO_PATH="`echo "${2}"|awk -F: '{print $1}'`";
    RELEASE="`echo "${2}"|awk -F: '{print $2}'`";
    USER_PATH="${PWD}";
echo "$PREFIX $REPO_PATH $RELEASE $USER_PATH";
## Dynamically added '.empty' files to the Git-Structure:
    cd "${REPO_PATH}"; populate_empty .; echo -en "\n";
#    git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0
# e.g.: git-archive /var/www/htdocs /repos/domain.name/website:rel-1.0.0 --explode
    OUTPUT_FILE="${USER_PATH}/${RELEASE}.tar.gz";
    git archive --verbose --prefix=${PREFIX}/ -o ${OUTPUT_FILE} ${RELEASE}
    cd "${USER_PATH}";
    if [[ "${3}" =~ [--explode] ]]; then
      if [ -d "./${RELEASE}" ]; then /bin/rm -rf "./${RELEASE}"; fi
      mkdir -p ./${RELEASE}; tar -xzf "${OUTPUT_FILE}" -C ./${RELEASE}
    fi
## Purging SRC/TRG_DIRs variable(s):
    unset PREFIX REPO_PATH RELEASE USER_PATH OUTPUT_FILE;
    return 0;
  }

যদি আপনি .gitattributes export-ignore .gitattributes সাথে ফাইলগুলি বাদ করেন export-ignore তবে .gitattributes git checkout চেষ্টা করুন

mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout -f -q

-f
সূচক থেকে পাথ চেক আউট যখন, unmerged এন্ট্রি উপর ব্যর্থ না; পরিবর্তে, unmerged এন্ট্রি উপেক্ষা করা হয়।

এবং

-q
Verbose এড়াতে

অতিরিক্তভাবে আপনি কোনও শাখা বা ট্যাগ বা এসভিএন-তে যুক্ত একটি নির্দিষ্ট কমিট পুনর্বিবেচনা থেকে SHA1 যোগ করতে পারেন (গিটে SHA1 এসভিএন-তে সংশোধন নম্বরের সমতুল্য)

mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout 2ef2e1f2de5f3d4f5e87df7d8 -f -q -- ./

/path/to/checkout/ খালি থাকা আবশ্যক, গিট কোনও ফাইল মুছে ফেলবে না, তবে একই সতর্কতার সাথে কোনও সতর্কতা ছাড়াই ফাইলগুলি ওভাররাইট করবে

আপডেট: শিরোনামযুক্ত সমস্যা এড়ানোর জন্য বা ট্যাগ, শাখা বা SHA1 এর সাথে এক্সপোর্ট করার জন্য চেকআউট ব্যবহার করার সময় কাজ করা সংগ্রহস্থলটি অক্ষত রাখতে, আপনাকে অবশ্যই -- ./ যোগ করতে হবে

ডাবল ড্যাশ -- গিটকে বলে যে ড্যাশের পরে সবকিছুই পাথ বা ফাইল, এবং এই ক্ষেত্রেও git checkout HEAD পরিবর্তন করতে বলে না

উদাহরণ:

এই কমান্ডটি শুধুমাত্র libs ডিরেক্টরি এবং readme.txt ফাইলটিও ঠিক তা থেকে প্রাপ্ত হবে

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout fef2e1f2de5f3d4f5e87df7d8 -f -q -- ./libs ./docs/readme.txt

এটি তৈরি করবে (overwrite) my_file_2_behind_HEAD.txt শিরোনাম HEAD^2 পেছনে দুটি

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout HEAD^2 -f -q -- ./my_file_2_behind_HEAD.txt

অন্য শাখা রপ্তানি পেতে

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout myotherbranch -f -q -- ./

উল্লেখ্য যে ./ সংগ্রহস্থল মূলের আপেক্ষিক


সম্ভবত এই সহজ সাধারন উপায় git archive সঙ্গে। আপনি সত্যিই প্রসারিত গাছ প্রয়োজন হলে আপনি এই মত কিছু করতে পারেন।

git archive master | tar -x -C /somewhere/else

বেশিরভাগ সময় যা আমাকে গিট থেকে কিছু 'এক্সপোর্ট' করতে হবে, আমি যেকোনো ক্ষেত্রে একটি সংকুচিত আর্কাইভ চাই তাই আমি এমন কিছু করি।

git archive master | bzip2 >source-tree.tar.bz2

জিপ সংরক্ষণাগার:

git archive --format zip --output /full/path/to/zipfile.zip master 

git help archive আরও বিস্তারিত জানার জন্য git help archive , এটা বেশ নমনীয়।

সচেতন থাকবেন যে সংরক্ষণাগারটি .git ডিরেক্টরি ধারণ করবে না তবে, এটিতে অন্যান্য লুকানো গিট-নির্দিষ্ট ফাইলগুলি যেমন। গিটিগোরোর,। গিট্যাট্রিবিউস ইত্যাদি থাকবে। আপনি যদি সংরক্ষণাগারগুলিতে তাদের না চান তবে নিশ্চিত করুন যে আপনি একটি .gitattributes ফাইলে এক্সপোর্ট-অবহেলার বৈশিষ্ট্য ব্যবহার করুন এবং আপনার সংরক্ষণাগারটি করার আগে এটি প্রেরণ করুন। আরও পড়ুন ...

দ্রষ্টব্য: যদি আপনি সূচী রপ্তানি করতে আগ্রহী হন, কমান্ডটি হয়

git checkout-index -a -f --prefix=/destination/path/

(আরো বিস্তারিত জানার জন্য গ্রেগ এর উত্তর দেখুন)


জিট ম্যানুয়াল থেকে :

গিট-চেকআউট-ইনডেক্স ব্যবহার করে "একটি সম্পূর্ণ গাছ রপ্তানি করুন"

প্রিফিক্স ক্ষমতা মূলত এটি "ট্রি হিসাবে এক্সপোর্ট" ফাংশন হিসাবে git-checkout-index ব্যবহার করতে তুচ্ছ করে তোলে। শুধু সূচী মধ্যে পছন্দসই গাছ পড়তে, এবং করবেন:

$ git checkout-index --prefix=git-export-dir/ -a


git archive এছাড়াও রিমোট রিপোজিটরি সঙ্গে কাজ করে।

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

রেপোর অভ্যন্তরে নির্দিষ্ট পথ রপ্তানি করার জন্য আপনি যতটুকু চান ততটুকু পথ যোগ করুন, যেমন:

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv

আমি প্রশ্নটি বুঝতে পারছি, এটি একটি স্থানীয় সংগ্রহস্থল থেকে একটি রাষ্ট্র আহরণ করার পরিবর্তে সার্ভার থেকে, ইতিহাস ছাড়া এবং অন্যান্য শাখার ডেটা ছাড়া কেবল নির্দিষ্ট রাষ্ট্র ডাউনলোড করার বিষয়ে আরও অনেক কিছু (এখানে অনেক সংখ্যক এনভায়রনকারীর মতো) ডাউনলোড করার বিষয়ে।

এটা এমনভাবে করা যেতে পারে:

git clone -b someBranch --depth 1 --single-branch git://somewhere.com/repo.git \
&& rm -rf repo/.git/
  • --single-branch Git 1.7.10 (এপ্রিল 2012) থেকে পাওয়া যায়।
  • --depthআছে (ছিল?) reportedly ত্রুটিপূর্ণ, কিন্তু একটি রপ্তানির মামলা, উল্লিখিত বিষয় কোন ব্যাপার করা উচিত নয়।

GitHub এ সংগ্রহস্থল হোস্ট করা হলে একটি বিশেষ কেস উত্তর।

শুধু svn export ব্যবহার করুন।

যতদূর আমি জানি গিথুব archive --remote অনুমতি দেয় না archive --remote । GitHub SVN সামঞ্জস্যপূর্ণ এবং তারা সমস্ত GIT repos svn অ্যাক্সেসযোগ্য থাকে তবে আপনি সাধারণত আপনার GitHub url এ কয়েকটি সমন্বয়গুলির সাথে স্বাভাবিকভাবেই svn export ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, একটি সম্পূর্ণ সংগ্রহস্থল রপ্তানি করতে, লক্ষ্য করুন যে ইউআরএলে trunk কীভাবে master প্রতিস্থাপন করে (অথবা প্রকল্পটির HEAD শাখা যাই হোক না কেন সেট করুন ):

svn export https://github.com/username/repo-name/trunk/

এবং আপনি একটি একক ফাইল বা এমনকি একটি নির্দিষ্ট পাথ বা ফোল্ডার রপ্তানি করতে পারেন:

svn export https://github.com/username/repo-name/trunk/src/lib/folder

JQuery জাভাস্ক্রিপ্ট লাইব্রেরি সঙ্গে উদাহরণ

HEAD বা মাস্টার শাখা trunk ব্যবহার করে উপলব্ধ করা হবে:

svn ls https://github.com/jquery/jquery/trunk

অ- HEAD শাখাগুলি /branches/ অধীনে অ্যাক্সেসযোগ্য হবে: /branches/

svn ls https://github.com/jquery/jquery/branches/2.1-stable

সব ট্যাগ /tags/ অধীনে একই ফ্যাশন:

svn ls https://github.com/jquery/jquery/tags/2.1.3

আমি একটি স্থাপনা স্ক্রিপ্ট জন্য এটি প্রয়োজন এবং আমি উপরে উল্লেখিত পদ্ধতির কোনো ব্যবহার করতে পারে না। পরিবর্তে আমি একটি ভিন্ন সমাধান figured:

#!/bin/sh
[ $# -eq 2 ] || echo "USAGE $0 REPOSITORY DESTINATION" && exit 1
REPOSITORY=$1
DESTINATION=$2
TMPNAME="/tmp/$(basename $REPOSITORY).$$"
git clone $REPOSITORY $TMPNAME
rm -rf $TMPNAME/.git
mkdir -p $DESTINATION
cp -r $TMPNAME/* $DESTINATION
rm -rf $TMPNAME

আমি মনে করি @Aredridel পোস্টটি সবচেয়ে কাছের, কিন্তু এতে আরো কিছু আছে - তাই আমি এখানে এটি যোগ করব; জিনিসটি svn, যদি আপনি একটি রেপোর একটি সাবফোল্ডারের মধ্যে থাকেন এবং আপনি করেন:

/media/disk/repo_svn/subdir$ svn export . /media/disk2/repo_svn_B/subdir

তারপরে svnপুনর্বিবেচনা নিয়ন্ত্রণের অধীনে থাকা সমস্ত ফাইল এক্সপোর্ট করবে (তারা তাজাভাবে যোগ করা হয়েছে বা সংশোধিত স্থিতি) - এবং যদি আপনার সেই ডিরেক্টরির মধ্যে অন্য "জাঙ্ক" থাকে (এবং আমি .svnএখানে সাবফোল্ডারদের গণনা করছি না তবে .oফাইলগুলির মত দৃশ্যমান সামগ্রী ) , এটা রপ্তানি করা হবে না ; শুধুমাত্র এসভিএন রেপো দ্বারা নিবন্ধিত যারা ফাইল এক্সপোর্ট করা হবে। আমার জন্য, এক চমৎকার ব্যাপার হল এই রপ্তানি স্থানীয় যে পরিবর্তন হয়েছে ফাইল রয়েছে না এখনো সংঘটিত; এবং আরেকটি চমৎকার জিনিস হচ্ছে এক্সপোর্ট হওয়া ফাইলগুলির টাইমস্ট্যাম্প মূলগুলির মতোই। অথবা, হিসাবে svn help exportএটি রাখে:

  1. PATH1 দ্বারা নির্দিষ্ট কাজের কপি থেকে একটি পরিষ্কার ডিরেক্টরি ট্রি রপ্তানি করে, যদি এটি প্রদান করা হয় তবে পুনর্বিবেচনা REV এ, অন্যথায় WORKING এ, PATH2 তে। ... যদি আরআরভি নির্দিষ্ট না হয়, সব স্থানীয় পরিবর্তন সংরক্ষিত হবে। সংস্করণ নিয়ন্ত্রণ অধীনে না ফাইল অনুলিপি করা হবে না।

gitটাইমস্ট্যাম্প সংরক্ষণ করা হবে না বুঝতে পারার জন্য, এই কমান্ডগুলির আউটপুট ( gitআপনার পছন্দের রেপোর একটি সাবফোল্ডারে ) তুলনা করুন :

/media/disk/git_svn/subdir$ ls -la .

... এবং:

/media/disk/git_svn/subdir$ git archive --format=tar --prefix=junk/ HEAD | (tar -t -v --full-time -f -)

... এবং আমি, যেকোনো ক্ষেত্রে, যে git archiveসমস্ত সংরক্ষণাগারভুক্ত ফাইলের টাইমস্ট্যাম্পগুলি একই হতে পারে তা লক্ষ্য করে! git help archiveবলেছেন:

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

... কিন্তু দৃশ্যত উভয় ক্ষেত্রে " প্রতিটি ফাইলের সংশোধন সময়" সেট করে ; এভাবে সেই ফাইলগুলির প্রকৃত টাইমস্ট্যাম্প সংরক্ষণ করা যায় না !

তাই, টাইমস্ট্যাম্পগুলি সংরক্ষণ করার জন্য, এখানে একটি bashস্ক্রিপ্ট রয়েছে যা আসলে "এক-মাছ ধরার নৌকা", যদিও কিছুটা জটিল - তাই এটি নীচে বহু লাইনগুলিতে পোস্ট করা হয়েছে:

/media/disk/git_svn/subdir$ git archive --format=tar master | (tar tf -) | (\
  DEST="/media/diskC/tmp/subdirB"; \
  CWD="$PWD"; \
  while read line; do \
    DN=$(dirname "$line"); BN=$(basename "$line"); \
    SRD="$CWD"; TGD="$DEST"; \
    if [ "$DN" != "." ]; then \
      SRD="$SRD/$DN" ; TGD="$TGD/$DN" ; \
      if [ ! -d "$TGD" ] ; then \
        CMD="mkdir \"$TGD\"; touch -r \"$SRD\" \"$TGD\""; \
        echo "$CMD"; \
        eval "$CMD"; \
      fi; \
    fi; \
    CMD="cp -a \"$SRD/$BN\" \"$TGD/\""; \
    echo "$CMD"; \
    eval "$CMD"; \
    done \
)

মনে রাখবেন যে আপনি "বর্তমান" ডিরেক্টরির (উপরে /media/disk/git_svn/subdir) -এ সামগ্রী রপ্তানি করছেন বলে মনে করা হয় - এবং আপনি যে গন্তব্যটি রপ্তানি করছেন তা কিছুটা অস্বস্তিকরভাবে স্থাপন করা হয় তবে এটি DESTপরিবেশ পরিবর্তনশীল। এই স্ক্রিপ্ট সঙ্গে যে নোট করুন; DESTউপরের স্ক্রিপ্টটি চালানোর আগে আপনাকে নিজে নিজে ডিরেক্টরি তৈরি করতে হবে ।

স্ক্রিপ্টটি ফুরিয়ে যাওয়ার পরে, আপনি তুলনা করতে সক্ষম হবেন:

ls -la /media/disk/git_svn/subdir
ls -la /media/diskC/tmp/subdirB   # DEST

... এবং আশা করি একই টাইমস্ট্যাম্পগুলি (সংস্করণ নিয়ন্ত্রণের অধীনে যারা ফাইলগুলির জন্য) দেখুন।

এই কাউকে সাহায্য করে,
Cheers!


বিকল্প 1 খুব দক্ষ না শোনাচ্ছে। তাহলে কি ক্লায়েন্ট কোন স্থান ক্লোন এবং হয় তারপর অপসারণ .gitফোল্ডারের?

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

বিকল্প 2 এবং অন্যদের উত্তর এখানে এই দৃশ্যকল্প সাহায্য করবেন না। না git archive(কারণ একটি .gitattributesফাইল করতে বাধ্য , এবং আমি এই বর্জনটি রিপোজিটোরিতে সংরক্ষণ করতে চাই না)।

এখানে আমি আমার সমাধান ভাগ করে নেব, বিকল্প 3 এর মতো, কিন্তু এর প্রয়োজন ছাড়া git clone:

tmp=`mktemp`
git ls-tree --name-only -r HEAD > $tmp
rsync -avz --files-from=$tmp --exclude='fonts/*' . raspberry:

rsyncসংকোচনের জন্য সমান লাইনের জন্য লাইন পরিবর্তন git archiveকরলেও একটি বর্জনের বিকল্প হিসাবে কাজ করবে (যেমন here বলা here )।


যতদূর সহজ উপায় আমি এটি করতে দেখেছি (এবং উইন্ডোজগুলিতেও কাজ করে) তা হল git bundle:

git bundle create /some/bundle/path.bundle --all

আরো বিস্তারিত জানার জন্য এই উত্তরটি দেখুন: আমি কিভাবে আমার উইন্ডোজ মেশিন থেকে ইউটিউব ড্রাইভের মাধ্যমে লিনাক্স মেশিনে আমার গিট রিপোজিটরিটি অনুলিপি করতে পারি?





svn-export