সংগ্রহস্থলটিতে না রেখে আমি কীভাবে গিট কমান্ড চালাব?


131

যে সংগ্রহস্থলের মধ্যে ছাড়া একটি সংগ্রহস্থলের বিরুদ্ধে গীত কমান্ডগুলো করার জন্য একটি উপায় আছে কি?

: এই মত উদাহরণ কিছু git /home/repo log?

দয়া করে আমাকে cdএটি বলবেন না । আমি একটি execকল মাধ্যমে এটি করছি ।


3
আপনি কি কেবল নিজের নির্বাহী কল হিসাবে "সিডি / হোম / রেপো এবং& গিট লগ" করতে পারবেন না?
অ্যালেক্স হাওয়ানস্কি

এটির সাথে আমার কিছু অদ্ভুত সমস্যা রয়েছে। আমি একটি নতুন প্রক্রিয়া শুরু করছি, প্রকৃতপক্ষে একটি নির্বাহী নয়, তবে তারা কীভাবে আলাদা তা আমি বেশি জানি না। গিট ডিরেক্টরিটি নির্দিষ্ট করার জন্য কেবলমাত্র একটি পরামিতি খুঁজে পাওয়া আমার পক্ষে সহজ।
টাওয়ার



1
git --git-dir = / home / repo / .git লগ
আতিক উর রেহমান

উত্তর:


102

চেষ্টা করুন:

git --git-dir=/home/repo/.git log

আপনার সংগ্রহস্থলের .git ডিরেক্টরি পর্যন্ত সমস্ত পথ দেওয়া গুরুত্বপূর্ণ। অন্যথায় আপনি কেবল একটি ত্রুটি বার্তা পাবেন যা এরকম কিছু বলে:

fatal: Not a git repository

2
আমি পেতে থাকি fatal: Not a git repository (or any of the parent directories): .git। @ পেট্রিক আমি কি কিছুতেই ভোট দিলাম না?
টাওয়ার

3
@ পেট্রিক উত্তরটি সম্পাদিত হয়েছিল (এটি মূলত --work-dirআমার মনে হয় বলেছিল )
গ্যারেথ

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

2
সর্বশেষতম গিটটি ব্যবহার করে আমার পক্ষে কাজ করেনি, তবে এটি-সি বিকল্প ব্যবহার করে উদাহরণস্বরূপ: গিট-সি / হোম / রিপো /.git লগ
ডিএসএনপ

1
এটি পো এর প্রত্যাশার মতো কার্যকর হয়নি। কেন এটি কোনও গ্রহণযোগ্য উত্তর? এটি বর্তমান দিরকে কাজের গাছ হিসাবে ব্যবহার করবে এবং ইতিহাসের জন্য নির্দিষ্ট .git ব্যবহার করবে, যা সম্পূর্ণ ভুল। যদি আপনি কেবল লগ না দেখায়, উদাহরণস্বরূপ git status,। -Cযাওয়ার সঠিক উপায়।
ওয়াং

218

-Cবিকল্প ( ডক্স ) ব্যবহার করুন :

git -C /home/repo log

এটি প্রায়শই সাধারণ ফোল্ডার সংযোজন --git-dirএবং সমতুল্য--work-tree.git

সম্পাদনা:

উত্তর নিম্নোক্ত ... যথেষ্ট আশ্চর্যজনক, কঠোরভাবে বলতে গেলে, এই প্রশ্নের একমাত্র সঠিক উত্তর। কার্য গাছের বাইরে থেকে সংগ্রহগুলি অ্যাক্সেস করার বিকল্পগুলি --git-dirএবং --work-treeবিদ্যমান .gitনেই, এগুলি অন্য কোথাও স্থানান্তর করতে ব্যবহৃত হয় এবং কিছু ক্ষেত্রে এগুলি ব্যবহার করা আরও জটিল।

উদাহরণস্বরূপ, /home/repo/subdirশুধুমাত্র লগ পেতে :

git -C /home/repo/subdir log .

অথবা

git -C /home/repo log subdir

বা log .দিয়ে ব্যবহার করা সম্ভব নয় । কাজের গাছের শীর্ষের সাথে সম্পর্কিত সাবপথটি বের করার জন্য অবশ্যই পথটি প্রক্রিয়া করা উচিত এবং সেই ক্ষেত্রেও, আপনি বিকল্পটি ব্যবহার না করলে গিটটি এটিকে পথ হিসাবে স্বীকৃতি দেবে না , সুতরাং একমাত্র সম্ভাব্য উপায় হ'ল:--git-dir--work-tree--

git --git-dir /home/repo/.git log -- subdir

তদ্ব্যতীত, আমার সংস্করণ (গিট 1.9.1) --work-treeসহ logসাবকম্যান্ডের সাথে মোটেই কাজ করছে না । এটি কেবল উপেক্ষা করা হয়:

git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir

আমি এমনকি বুঝতে পারি না এটি কোনও বাগ বা কোনও বৈশিষ্ট্য ... যথারীতি অনেকগুলি গিট ডিজাইনের পছন্দ সহ।


অতিরিক্ত ব্যাখ্যা যোগ করার জন্য ধন্যবাদ।
এরিক জি.হ্যাগস্ট্রোম

git stashএটি একটি সাবকম্যান্ডের অন্য একটি উদাহরণ যা ব্যর্থ হলে --git-dirএবং --work-treeব্যবহৃত হয়।
d5ve

4
-সি বিকল্পটি গিটারের 1.8.5 সংস্করণে যুক্ত করা হয়েছিল, যা 2013 সালে প্রকাশিত হয়েছিল
d5ve

-সি আমার জন্য --git-dir এর চেয়েও ভাল কাজ করেছেন ... -সি রেপোর জন্য গিট কনফিগারেশন সেটিংস সম্মান করে। 1.6.5.msysgit.1
স্ট্রাফ

@ ক্যালান্ডোয়া আমাদের সর্বদা মূলটি থেকে অবস্থানটি নির্দিষ্ট করা দরকার, রেপোর নামটিতে একাধিক শব্দ থাকলে আমরা এই
কোডটিতে

17

আসলে আপনার একসাথে --git-dir এবং - ওয়ার্ক-ট্রি ব্যবহার করা দরকার। এখানে একটি উদাহরণ:

local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di

1
একা --git-dir সহ উত্তরের চেয়ে এটি আরও সঠিক। git-scm.com/blog/2010/04/11/environment.html
এরিক জি Hagstrom

11

অনেকবার চেষ্টা করেছি! আমি অবশেষে এটি পেয়েছি!

git -C dir --no-pager log --format='%an' -1 filename

মনে রাখবেন, দয়া করে আপনার .git যুক্ত করবেন না

-সি দির


3

এটি @ ম্যাক্সের উত্তরের অনুরূপ। দুর্ভাগ্যক্রমে, --git-dir আমার যা প্রয়োজন তা করেন নি। রেট্রোস্পেক্টে সম্পাদনা করুন , আর একটি উত্তর [পূর্ববর্তী] যা আমি ব্যবহার করে প্রস্তাবিত পড়িনি --work-tree। পরিবেশ বা পতাকা ব্যবহার করা আরও উপযুক্ত কিনা তা আমি নিশ্চিত নই তাই কেউ যদি এর ব্যবহার খুঁজে পায় তবে আমি আমার উত্তরটি রেখে দেব, তবে আমি ব্যবহার করতে স্যুইচ করব --work-tree/ --git-dir


দুটি রেপো রয়েছে, একটি অন্যের ভিতরে কিন্তু একটি সাবমডিউল নয়; বাইরের রেপো এটিকে উপেক্ষা করে:

tools (outer repo)
  gcc/4.9.2 (inner repo)

আমি যা চেয়েছিলাম তা ছিল git rev-parse --show-prefixবাইরের রেপোর তুলনায় আউটপুট । আমি এখানে যা এলাম তা এখানে (বাশ সিনট্যাক্স; পঠনযোগ্যতার জন্য লাইন জুড়ে বিভক্ত):

prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)

৪.৯.২ এর মধ্যে থেকে মৃত্যুদন্ড কার্যকর করা হলে এটি স্ট্রিং তৈরি করে gcc/4.9.2


1

যে কোনও গিট কমান্ডের জন্য, আপনি এটি করতে পারেন:

git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>

উদাহরণস্বরূপ, আপনি যদি গিট স্ট্যাটাসটি করতে চান:

 git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/  status

বা আপনি যদি শাখাটি পরীক্ষা করতে চান তবে রেপো রয়েছে:

git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/  rev-parse --abbrev-ref HEAD
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.