Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 43

0
votes
answers
19 views
+10

如何以編程方式查找兩個分支的共同祖先

1

我正在研究一個項目,其中我的項目集成了git。爲了整合目的,我使用了go-git庫。我的問題是如何以編程方式找到兩個分支的共同祖先?我想實現這個功能。看起來像go-git和其他去庫不提供這樣的功能。如何以編程方式查找兩個分支的共同祖先

+0

行爲小程序https://github.com/src-d/ go-git/issues/679 – orirawlings

沙发
0
0

下面是使用go-git模仿的git merge-base --all

package main 

import (
    "fmt" 
    "os" 

    "gopkg.in/src-d/go-git.v4" 
    . "gopkg.in/src-d/go-git.v4/_examples" 
    "gopkg.in/src-d/go-git.v4/plumbing" 
    "gopkg.in/src-d/go-git.v4/plumbing/object" 
    "gopkg.in/src-d/go-git.v4/plumbing/storer" 
) 

// store h in set, s, handling nil s if necessary. Return new set. 
func store(s map[plumbing.Hash]bool, h plumbing.Hash) map[plumbing.Hash]bool { 
    if s == nil { 
     s = make(map[plumbing.Hash]bool) 
    } 
    s[h] = true 
    return s 
} 

// mergeBase finds best common ancestors between two commits to use in a 
// three-way merge. One common ancestor is better than another common ancestor 
// if the latter is an ancestor of the former. A common ancestor that does not 
// have any better common ancestor is a best common ancestor, i.e. a merge base. 
// Note that there can be more than one merge base for a pair of commits. 
func mergeBase(s storer.EncodedObjectStorer, a, b plumbing.Hash) ([]plumbing.Hash, error) { 
    commitA, err := object.GetCommit(s, a) 
    if err != nil { 
     return nil, err 
    } 

    commitB, err := object.GetCommit(s, b) 
    if err != nil { 
     return nil, err 
    } 

    // Mapping of direct descendants of each commit we visit 
    desc := make(map[plumbing.Hash]map[plumbing.Hash]bool) 

    // Set of commits reachable from a 
    reachableFromA := make(map[plumbing.Hash]bool) 

    // Walk commits reachable from A 
    err = object.NewCommitPreorderIter(commitA, nil, nil).ForEach(func(c *object.Commit) error { 
     reachableFromA[c.Hash] = true 
     for _, h := range c.ParentHashes { 
      desc[h] = store(desc[h], c.Hash) 
     } 
     return nil 
    }) 
    if err != nil { 
     return nil, err 
    } 

    // Set of common commits between a and b 
    common := make(map[plumbing.Hash]bool) 

    // Walk commits reachable from B 
    err = object.NewCommitPreorderIter(commitB, nil, nil).ForEach(func(c *object.Commit) error { 
     if reachableFromA[c.Hash] { 
      common[c.Hash] = true 
     } 
     for _, h := range c.ParentHashes { 
      desc[h] = store(desc[h], c.Hash) 
     } 
     return nil 
    }) 
    if err != nil { 
     return nil, err 
    } 

    best := make(map[plumbing.Hash]bool) 

    // Trim down the set of common commits to only those that are best 
    for h := range common { 
     best[h] = true 
     for child := range desc[h] { 
      if common[child] { 
       // there is a descendant to h that is common to both a and b. h is not in best. 
       delete(best, h) 
       break 
      } 
     } 
    } 

    var result []plumbing.Hash 
    for h := range best { 
     result = append(result, h) 
    } 
    return result, nil 
} 

// Open an existing repository in a specific folder. 
func main() { 
    CheckArgs("<path> <commitA> <commitB>") 
    path := os.Args[1] 
    a := plumbing.NewHash(os.Args[2]) 
    b := plumbing.NewHash(os.Args[3]) 

    r, err := git.PlainOpen(path) 
    CheckIfError(err) 

    bases, err := mergeBase(r.Storer, a, b) 
    CheckIfError(err) 

    for _, b := range bases { 
     fmt.Println(b) 
    } 
} 
+0

謝謝@orirawlings –

板凳
0
1

你可以使用命令的結果:

git merge-base branch1 branch2 
+0

我想在golang中實現這個命令。 –

+0

也許看看https://github.com/libgit2/git2go – Philippe

0
votes
answers
28 views
+10

來自SVN的所有提交歷史記錄都沒有遷移到GIT

1

我是一名開發人員,並且第一次將我的整個SVN存儲庫遷移到GIT存儲庫。作爲一個POC,我已經遷移了當前的開發分支。移民在歷史上也取得了成功。 問題:GIT中的SVN提交歷史記錄 遷移結果:當前SVN的所有分支歷史記錄都是從SVN遷移過來的,但是從SVN中創建該分支的日期開始。 我的期望:每個單獨文件的歷史以及完整的歷史和相關的代碼更改。來自SVN的所有提交歷史記錄都沒有遷移到GIT

例如:我的根存儲庫是「MyProject」。每個版本都有單獨的代碼倉庫,比如「MyDevRepo-rel-1.0」等等......我有一個文件「Helloworld.java」,它是在自發布1.0以來一直在處理的「MyDevRepo-rel-1.0」中創建的直到目前的版本,說它是「MyDevRepo-rel-5.0」。 現在,當我遷移「MyDevRepo-rel-5.0」時,我只有文件HelloWorld.java的當前分支提交歷史記錄,但不是從發行版1.0開始的

任何人都可以幫忙。

+0

請您提供明確的問題陳述?我還想邀請你學習SVN和git之間的區別。 – evolutionxbox

+0

MyDevRepo-rel-1.0,MyDevRepo-rel-5.0等是MyProject下的子文件夾嗎?如果它們是子文件夾,那麼文件Helloworld.java位於何處?如果修訂版本1.0已經遷移到git repo,那麼修訂版本中的所有文件都應該正確查看,除非文件Helloworld.java沒有提交到版本1.0中。你可以仔細檢查svn日誌來檢查哪個版本提交文件'Helloworld.java'。 –

+0

1.MyDevRepo-rel-1.0,MyDevRepo-rel-5.0等是MyProject.2的子文件夾.HelloWorld.java最初是在MyDevRepo-rel1.0中創建的。 3.對於每個發佈開發週期,MyDevRepo-rel-1.0是第一個,MydevRepo-rel-5.0是第5個發佈版本.HelloWorld.java在發佈1.0到5.0之間有自己的提交歷史記錄。假設HelloWorld.java文件有10個提交,直到5.0和5提交到5.0。當我遷移5.0回購時,我獲得了5次提交歷史,但我的期望是獲得所有15次提交歷史記錄(從rel 5.0開始的10到5.0 + 5)。我的期望是否正確,如果不是,請提出建議做什麼。 – Venkata

沙发
0
-1
Thanks all for responding to my doubts. I am able to resolve this issue and 
the set of commands follow. 

My requirement is : MIGRATE EXISTING SVN repository to GIT with all the commit 
history. 


md mydirectory 
cd mydirectory 
git svn init <SVN_ROOT_URL> 
git config --global user.name "MY NAME" 
git config --global user.email "MY EMAIL" 
git config svn.authorsfile authors.txt 
git svn fetch 
git svn show-ignore >> .gitignore 
git remote -v (to check the remote branches) 
git remote add origin <MY_GIT_REPO>.git 
git add . 
git commit -m "migrating svn to git" 
git push -u origin master (this will push your local repo to the git server) 
git svn rebase (this command will sync the latest changes from svn to the current git repo) 
git push (this command pushes all the latest code checked-out code from SVN to GIT). 

Mistake I made : I migrated one individual branch and expected all the 
commit history right from the inception of every file. 

Learnings : If I want all the commit history of every individual file, then 
I had to migrate the entire SVN repository from the root. This resolved my 
problem. 
Please add if there are any missing things. 
0
votes
answers
26 views
+10

在終端提示符當前git分支

-1

我試圖做一個小工具(也許它已經存在)來幫助從終端處理存儲庫和分支。在終端提示符當前git分支

基本上這個想法是在提示符下輸入分支的名稱(類似於虛擬環境,它也顯示提示中的當前環境)。

下面的命令只是提取分公司目前我在名字。

git branch | grep "*" | cut -c3- 

包括這在我的.bashrc文件修改PS1作品,但只有當控制檯打開時改變了提示。

我想在每次更改文件夾cd my_folder,cd ..時更新提示,所以如果我轉到另一個存儲庫,它會更新分支。

所以我爲cd創建了一個別名,它在執行cd之後現在追加了這個小腳本。

但是,如果我使用git更改分支,因爲我沒有更改文件夾,提示未立即更新。

我也可以爲git創建一個別名,但我的印象是我改變了太多的東西,也許這是已經存在的東西。

爲避免重新發明輪子,這是否已經存在?使用它是一個好主意嗎?

謝謝

+2

有許多shell框架可以做到這一點。請在https://github.com/robbyrussell/oh-my-zsh,https://github.com/sorin-ionescu/prezto等找到實例。 –

沙发
0
0

將此代碼添加到?/ .bashrc。添加完後不要忘記使用source命令。

parse_git_branch() { 
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/ (1)/' 
} 
export PS1="[email protected]h [33[32m]w[33[33m]$(parse_git_branch)[33[00m] $ " 

希望這可能有所幫助。

板凳
0
0

首先是檢查你是否在一個Git倉庫,然後用符號-REF命令解壓:

function gitbranch 
{ 
    if git rev-parse --git-dir &>/dev/null; then 
     printf "%s" "[$(git symbolic-ref HEAD --short)]" 
    fi 
} 
export PS1="[email protected]h [33[32m]w[33[33m]$(gitbranch)[33[00m] $ " 

將它添加到你的.bashrc文件。

0
votes
answers
13 views
+10

我應該從git存儲庫克隆所有數據嗎?

0

混帳克隆SSH://用戶名@主機:端口/ project.git我應該從git存儲庫克隆所有數據嗎?

我不得不改變使用Git web項目的幾個文件,並且不需要在我的硬盤具有所有數據。

我們應該使用什麼命令通過Git編輯幾個文件? 還是不可能?

P.S .:我是Git的新手,如果你還告訴我,那應該寫什麼而不是「project.git」(如何獲得項目名稱?

沙发
0
0

Git與您如何更改文件無關。它只對所做的更改感興趣,它會跟蹤它們並將它們存儲起來。您可以使用一些開放源代碼help下載項目的某些部分。但是,您無法將更改推回。

如果您想在不下載整個項目的情況下輕鬆更改某些文件,您可能需要使用Web瀏覽器界面並從此處提交。否則,我認爲你需要下載整個項目。也許這會幫助你,如果你使用github像界面。

https://help.github.com/articles/editing-files-in-your-repository/

+0

感謝快速回答 –

+0

沒問題,如果你的作品,你可以請接受並給予好評我的答案。謝謝。 –

+0

剛剛註冊,不能upvote ..對不起 –

0
votes
answers
20 views
+10

如何使用密碼推送自己的github主旨,無TFA?

0

所以,我已經試過在github在我自己的用戶名設置一個要點:如何使用密碼推送自己的github主旨,無TFA?

...我試圖克隆,編輯和推動這一要點。我的個人資料/編輯個人資料/安全性(github.com/settings/security)中沒有啓用雙因素身份驗證(2FA)。

我想克隆這個回購,所以當我推,我用我的GitHub密碼進行身份驗證,而不是與personal access token;我也想避免爲SSH訪問創建公鑰。

這是我目前可以觀察到:剛剛

cd /tmp/ 
$ git clone https://[email protected]/771e0ca9b9f1fa17464373266400386f.git yet_another_git_tute_gist 
Cloning into 'yet_another_git_tute_gist'... 
remote: Counting objects: 3, done. 
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 
Unpacking objects: 100% (3/3), done. 
Checking connectivity... done. 

因此,克隆時,即使我在HTTPS URL指定了用戶名,我不會被要求輸入密碼,倉庫被克隆。這是推前變化的一個例子:

cd yet_another_git_tute_gist/ 

git config user.name sdaau 
git config user.email [email protected] 

echo >> README.md # just add empty line 
git add README.md 
git commit -m 'testing' 
# [master 0f958d5] testing 
# 1 file changed, 1 insertion(+) 

...這是推:

$ git push --all 
Password for 'https://[email protected]': 
remote: Invalid username or password. 
fatal: Authentication failed for 'https://[email protected]/771e0ca9b9f1fa17464373266400386f.git/' 

會有人知道我在做什麼錯?

沙发
0
0

哦,再克隆半小時後,改變並得到推錯誤,就像我在寫這個問題,最終還是成功了:

$ git push --all 
Password for 'https://[email protected]': 
Counting objects: 5, done. 
Writing objects: 100% (3/3), 246 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
To https://[email protected]/771e0ca9b9f1fa17464373266400386f.git 
    b706450..0f958d5 master -> master 

...所以我猜我沒有正確輸入密碼。儘管如此,讓我們繼續保持這個Q/A在線,因爲我沒有找到像這樣一個完全措辭的例子(並且我找到了一個,我可能會嘗試更難以輸入正確的密碼)。


自我提醒:remote: Gist does not support directories.

0
votes
answers
23 views
+10

獲取基於給定名稱的經度和緯度的API

0

我有一個android應用程序,它具有用戶可以輸入城市名稱的編輯文本,並且該應用程序必須獲取用於調用另一個API的經度和緯度。獲取基於給定名稱的經度和緯度的API

我該如何實現這種類型的東西?

我搜索了一下,發現Google地理編碼API應該可以幫助我,但我還必須實現Google Maps API,我不知道這是否正確。

但是,我的應用程序一定不能有地圖。

如果這是正確的,是否還有其他api,我可以給它的城市名稱,並返回它的經度和緯度?

+0

的[?我怎樣才能找到地址的經度和緯度(可能的複製https://stackoverflow.com/questions/3574644/how- can-i-find-the-latitude-and-long-from-address) – Ibrahim

沙发
0
1

您無需實施Google地圖。您可以使用Google Place自動填充:https://developers.google.com/places/android-api/autocomplete

有了這個,你將有一個搜索欄,當你輸入時,它將獲取地點,並給你經緯度和更多。

您可以輕鬆地添加谷歌的地方的build.gradle:compile 'com.google.android.gms:play-services-places:11.4.2'

+1

非常感謝。 這解決了我的問題。 這比正常編輯文本有效得多。 –

0
votes
answers
21 views
+10

爲什麼_site文件有時會顯示提交?

1

這是我的.gitignore頂部爲什麼_site文件有時會顯示提交?

### Jekyll ### _site/ .sass-cache/ .jekyll-metadata

似乎正確設置,但我仍然得到_site /文件在我GitKraken顯示...

編輯:這裏是有問題的回購,謝謝:https://github.com/BradCoffield/APIs-for-librarians

+0

你對'.gitignore'還有什麼?也許有一些其他的規則是用一些通配符來取消'_site'的移除。 '_ * /'? –

+0

其他需要測試的東西:打開存儲庫中的Git bash,並檢查當您運行'git status'命令時是否也看到'_sites'文件夾。如果你看到這個問題,那麼問題可能出現在'.gitignore'中,如果不是的話,問題可能與GitKraken –

+0

請分享一個鏈接到存儲庫。 – JoostS

沙发
0
3

您的.gitignore文件看起來不錯。在添加.gitignore文件之前,您可能已在「_site」文件夾中添加了文件。如果你在你的倉庫中看到'_site'文件夾,那很可能是這種情況。從你的倉庫刪除'_site'文件夾,你應該很好。

您可以輕鬆地做到這一點並沒有實際刪除使用該文件夾:

git rm --cached _site 

後跟提交。

+1

我建議添加最小的rm --cache以使其成爲正確的答案。 – kabanus

+0

@kabanus隨意做。 – JoostS

+0

@kabanus謝謝! – JoostS

0
votes
answers
21 views
+10

git-upgrade ERR!恢復初始來源(反應母語-混帳升級)

-2

我想升級我的陣營本地項目版本git-upgrade ERR!恢復初始來源(反應母語-混帳升級)

,但文我使用的反應,本機的git升級升級,是錯誤的

這是我的代碼在終端

react-native-git-upgrade 0.48.0

升級,但它是錯誤的,看看這幅畫 this is error picture

我應該怎麼現在做?

它在XCode9 MacOS的塞拉利昂運行10.12.6

電流反應原生版本是0.44

我想升級到0.48.0

+0

請嵌入有問題的圖像。 –

+0

請更具體一些:你做了哪些步驟?你期待什麼發生?什麼是錯誤?你想達到什麼目的?你使用哪種程序/操作系統和版本? – pedrorijo91

+0

對不起,我編輯我的問題,期待您的回覆 –

沙发
0
0

如果你想要的僅僅是有一個新的版本的反應原生,然後只需更新package.json中的版本並在項目文件夾上運行「npm install」。

你的問題是另一個,主要與git的工作方式有關。

+0

我曾經使用npm install,但會有很多丟失的文件,所以我使用react-native-git-upgrade。 –

0
votes
answers
26 views
+10

如何使用GitKraken來檢查這種特定的提交?

2

我使用的是Git vcs的gui客戶端GitKraken。 GitKraken也是我所有Git倉庫的單一位置。 但我沒有找到任何選項,我可以去這樣一個特定的提交,我已經在我的git bash中使用了 「git checkout」命令。如何使用GitKraken來檢查這種特定的提交?

+0

可能重複[如何簽出git kraken中的舊提交?](https://stackoverflow.com/questions/39977015/how-to-checkout-old-commit-in-git-kraken) – kowsky

沙发
0
0

請參閱「Checkout a branch」:

上的任何承諾,您可以單擊鼠標右鍵,選擇‘在這裏創建一個領域’,並簽出分支。

https://support.gitkraken.com/img/documentation/repositories/Add-branch.gif

這樣的話,你會避免在分離蓋分支,並切換到預期的提交。

0
votes
answers
35 views
+10

Git Option不再顯示在Android Studio中

1

我錯過了Android Studio - > VCS中的git選項。一會兒,幾分鐘後它就消失了,我不知道爲什麼會發生這種情況。Git Option不再顯示在Android Studio中

你能幫我嗎?

這是我所看到的:

enable version control Integration

和:

Checkout from Version control

沙发
0
0

它主要是由於的Git整合插件被禁用。你應該啓用插件:

文件 - >設置 - >插件 - > serch git - >啓用Git集成 - >確定 - >重新啓動AS。

enter image description here

+0

非常感謝。我不知道爲什麼該插件已被停用。 – Hierarchy

板凳
0
0

做檢查:

  • ,你仍然有.git在您的項目
  • Settings | Version Control確實顯示Git的整合爲活動(再:「‘VCS’ - >‘啓用版本控制集成’。」,因爲你展示,應該有GIT)
+0

有一個git文件夾。我剛剛用它來推命令提示符。 不,沒有設置|版本控制了。我也嘗試重新安裝android studio,但它仍然丟失.. 我忘了告訴你,我從我的一個同學使用macos得到我的項目。因此,我只是將src文件夾導入到一個新項目中。 – Hierarchy