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: 9

0
votes
answers
55 views
+10

Squash提交閉合請求

0

我有合併和關閉請求。之後,我刪除了該分支。並且該分支的所有提交現在都顯示在合併分支的歷史記錄中。現在有一個選項可以在Git中恢復分支,但我真正想要的是壓縮該PR的某些提交,以便它不會顯示在合併分支的提交歷史記錄中。假設最初PR有5次提交併成功合併並關閉。 有沒有辦法壓縮合並和關閉的公關中的一些提交?Squash提交閉合請求

+0

https://stackoverflow.com/a/47048569/2303202 – max630

+0

我的問題是,我不能直接在合併的分支上更改提交歷史記錄,因爲這是受保護的分支。有沒有什麼辦法可以從封閉的請求或恢復的分支中重寫歷史? – Akshay

+0

不,如果一個提交是某個分支的歷史,那麼它是如何發生的。 IT無法將其刪除。 – max630

沙发
0
0

你會使用git rebase -i <hash of first commit before merge>,然後你可以選擇擠壓相關的提交。注意這是重寫實際的提交歷史記錄,所以如果你與其他人共享存儲庫,那麼在完成這些操作後你會有不同的提交,這是潛在的危險領域。

板凳
0
0

的唯一方法是改變在master分支歷史(假設你的feature/branch被合併上master):

$ git checkout master 
$ git reset --hard <commit-before-merge> 
$ git push -f origin master 

現在你可以修改你的歷史:

$ git checkout feature/branch 
# Hypothesis: 5 commits to squash together 
$ git rebase -i HEAD~5 
# Rewrite your history: reword, squash, etc... 

在這一點,也許你應該重新分配特徵/主分支

$ git rebase master 

一旦你滿意你的分支歷史,你可以把上游:

$ git push -f origin feature/branch 

然後創建GitHub上一個新的拉請求,並把它合併

重要事項

每個人跟蹤分支master將不得不頒發git pull --rebase以重新與上游重新同步它們的歷史記錄,其被改寫爲:

$ git checkout master 
$ git pull --rebase origin master 

這將防止任何衝突和/或合併提交將上游歷史視爲理所當然(接受theirs),發出快進。

這同樣適用於分支仍取決於master,這將需要相應地重建基礎:

$ git checkout feature/branch-still-depending-from-master 
$ git rebase master 

希望這有助於;)

0
votes
answers
68 views
+10

通過Django中的標籤獲取相關對象

2

我的目標是在訪問單個產品頁面時在我的電子商務網站中構建「推薦產品」部分。通過Django中的標籤獲取相關對象

我有一個產品的sereis在管理員中有幾個用戶定義的標籤。標記系統是django-taggitmodelcluster的組合,詳見Wagtail-CMS docs

我試圖使它在訪問產品頁面時,Django會查看所有其他具有相同/相似標籤的產品,並根據相同標籤的數量在「推薦產品」部分中列出它們。根據their docsdjango-taggit文檔似乎在其API中使用get_related()函數解決了此需求。

我很努力地得到這個工作,但隨着我不斷遇到錯誤,最新的是Exception Type: KeyError at /categories/test-category/test-product/ Exception Value: (15,)。這裏是我到目前爲止的代碼:

class ProductTag(TaggedItemBase): 
    content_object = ParentalKey('Product', related_name='tagged_items') 

class Product(Page): 
    ... 

    tags = ClusterTaggableManager(through=ProductTag, blank=True) 

def get_context(self, request): 
    context = super(Product, self).get_context(request) 

    current_tags = self.tags 
    related_products = Product.objects.filter(current_tags.similar_objects()) 

    context['related_products'] = related_products 
    return context 

編輯 |全錯誤回溯如下:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/categories/test-category/test-product/ 

Django Version: 1.11.5 
Python Version: 3.5.2 
Installed Applications: 
['home', 
'search', 
'products', 
'wagtail.wagtailforms', 
'wagtail.wagtailredirects', 
'wagtail.wagtailembeds', 
'wagtail.wagtailsites', 
'wagtail.wagtailusers', 
'wagtail.wagtailsnippets', 
'wagtail.wagtaildocs', 
'wagtail.wagtailimages', 
'wagtail.wagtailsearch', 
'wagtail.wagtailadmin', 
'wagtail.wagtailcore', 
'modelcluster', 
'taggit', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.security.SecurityMiddleware', 
'wagtail.wagtailcore.middleware.SiteMiddleware', 
'wagtail.wagtailredirects.middleware.RedirectMiddleware'] 



Traceback: 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersexception.py" in inner 
    41.    response = get_response(request) 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersase.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:Usersddl_9Envsfstvllibsite-packagesdjangocorehandlersase.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packageswagtailwagtailcoreviews.py" in serve 
    26.  return page.serve(request, *args, **kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packageswagtailwagtailcoremodels.py" in serve 
    773.    self.get_context(request, *args, **kwargs) 

File "C:Usersddl_9Desktopfstvlproductsmodels.py" in get_context 
    143.  related_products = current_tags.similar_objects() 

File "C:Usersddl_9Envsfstvllibsite-packages	aggitutils.py" in inner 
    146.   return func(self, *args, **kwargs) 

File "C:Usersddl_9Envsfstvllibsite-packages	aggitmanagers.py" in similar_objects 
    350.     tuple(result[k] for k in lookup_keys) 

Exception Type: KeyError at /categories/test-category/test-product/ 
Exception Value: (15,) 

如果我嘗試訪問其他產品頁面,我會得到相同的錯誤,只是使用不同的異常值。該函數期望從一個字典的關鍵,但由於某種原因,它被賦予的價值,而不是...這可能是與代碼兼容性問題?

+0

'related_products = current_tags.similar_objects()'不會返回你想要的'Product'對象列表嗎?通過'Product.objects.filter(...)'傳遞它似乎沒有任何目的(也不是'filter'方法的有效語法)。 – gasman

+0

這就是我在第一次嘗試時所嘗試的 - 仍然給了我同樣的錯誤:'異常類型:KeyError在/ categories/test-category/test-product /異常值:(15,)'和回溯到'元組(在lookup_keys中k的結果[k])'@gasman – DDiran

+0

請分享完整的回溯 - 單行代碼並不能真正告訴我任何事情。 – gasman

沙发
0
0

好吧,經過大量的研究和修補,我發現了一個解決方案,但是這個只適用於Django> = 1.9

Github用戶nickhudkins遇到同樣的問題,並編輯了similar_objects()函數來解決KeyError,詳見他的ticket

解決的辦法是進入taggit managers.py並按如下所示編輯函數(+表示添加行和 - 刪除它們)。

   objs = rel_model._default_manager.filter(**{ 
        "%s__in" % remote_field.field_name: [r["content_object"] for r in qs] 
       }) 
+   actual_remote_field_name = remote_field.field_name 
+   if VERSION > (1, 9): 
+    actual_remote_field_name = f.target_field.get_attname() 
+   else: 
+    actual_remote_field_name = f.related_field.get_attname() 
       for obj in objs: 
-    items[(getattr(obj, remote_field.field_name),)] = obj 
+    items[(getattr(obj, actual_remote_field_name),)] = obj 
      else: 
       preload = {} 
       for result in qs: 
板凳
0
0

如果你不想打補丁django-taggit,其他可能的解決方案是使用raw SQL查詢。類似於:

ArticlePage.objects.raw('select a.page_ptr_id, p.title, count(at.tag_id) as tag_count from article_articlepage a join wagtailcore_page p on a.page_ptr_id = p.id join article_articletag at on at.content_object_id = a.page_ptr_id join taggit_tag t on t.id = at.tag_id where tag_id in (1, 2, 3) group by (page_ptr_id, p.id) order by tag_count desc'); 

ArticlePage - 我的模型

ArticleTag - 對我的代碼(從TaggedItemBase iherited)M2M模型

wagtailcore_page - Taggit標籤 - 爲

taggit_tag頁基地鶺鴒表表

(1, 2, 3) - j ust示例標記ID

希望它有幫助!隨意適應您的需求。

0
votes
answers
65 views
+10

應該將mvnw文件添加到存儲庫中嗎?

2

當創建彈簧啓動項目通過使用start.spring.io,一些行家封裝文件獲得包括:應該將mvnw文件添加到存儲庫中嗎?

  • mvnw
  • mvnw.bat

應該在提交給一個混帳回購協議時,有文件被忽略?

沙发
0
3

A mvnw Maven包裝腳本允許您在未安裝Maven的情況下運行Maven命令並將其顯示在PATH上。它通過在你的PATH上尋找Maven來實現,如果沒有找到它,它將它下載並安裝到默認位置(你的用戶主目錄,IIRC)。

它們很方便,但它們不一定是您項目的一部分,與您的項目代碼和配置不一樣。換句話說:

  • 任何給定的mnvw文件可用於多個不相關的項目
  • 一個mvn文件將幾乎肯定不會是不同項目的一個版本到另一個

在此基礎上,你可以作出一個案例不承諾mvnw到您的代碼庫。

然而,包括在你的回購一mvnw腳本確實有這些好處:

  • 允許任何人誰克隆/檢查出你的回購協議,以建立自己的項目,而不需要首先安裝Maven。
  • 確保正在使用的Maven版本是與您的項目兼容的版本。

在此基礎上,你都可以成爲的情況下犯mvnw你的代碼庫。

所以,雙方都有優點和缺點。只要選擇最適合那些將使用您的回購的人的需求的一面。或者:

  • 在您的自述文件中加入一些內容,明確指出(a)Maven是必備條件,(b)需要哪個版本的Maven。

...或:

  • 包括一個mvnw腳本。
板凳
0
1

這取決於,如果你想使用Maven包裝或不。如果不是,那麼你可以刪除這些文件。如果你想使用它,那麼你必須提交存儲庫中的文件,否則使用它是沒有意義的。

0
votes
answers
57 views
+10

在GitHub上更新我的簡歷

1

我使用GitHub頁面託管我的個人網站一段時間。今天,我更新了我的簡歷,並希望將其推送到遠程存儲庫。在GitHub上更新我的簡歷

我原來的簡歷被命名爲'Resume.pdf'。我的新更新的簡歷再次被稱爲'Resume.pdf',我已經把它放在我的本地存儲庫中,替換原來的。除此之外,我沒有做任何其他改變。但是現在我的Git Shell拒絕承認我的本地存儲庫有任何更新(並且自從它是一個.pdf文件就可以理解了)。所以,當我運行git status命令時,它不會顯示任何要添加的內容,因此也不會提交任何內容。

我想知道是否有某種方式可以強制承諾並推送新的簡歷。此外,這種強有力的承諾是否有效(從誠信的角度來看)?

+0

聽起來很奇怪,因爲git知道要管理二進制文件。如果我是的話,我會仔細檢查它是否是你正在嘗試更新的簡歷 – Pavel

沙发
0
0

仔細檢查,如果該文件不會被忽略:

git check-ignore -v -- Resume.pdf 

如果可以用git add -f -- Resume.pdf添加。

0
votes
answers
85 views
+10

「混帳」不被識別爲一個內部或外部命令的[Windows]

1

不是「混帳」不被識別爲一個內部或外部命令的[Windows]

'git' is not recognized as an internal or external command

我建立了我的github倉庫重複,下載Github上桌面,但我無法弄清楚如何將文件上傳到回購站。

Here are Github's instructions for me

我已經做了「快速設置」,並建立了GitHub的桌面我的電腦上。但是,我無法使命令行回購設置正常工作。每當我輸入一個git命令時,它會給出上述錯誤。我試圖研究爲什麼發生這種情況,但唯一相關的來源(上面鏈接)給出了有關過去版本的github應用程序的說明。

我知道這可能很簡單,但我很新,不知道該怎麼做。任何幫助表示讚賞。

沙发
0
0

如果以某種方式GitHub Destop沒有添加內部Git到您的PATH,您可以手動使用最新的Git for Windows release

解壓檔案PortableGit-2.15.0-64-bit.7z.exe任何你想要的和add it to your PATH (as I do here),然後啓動GitHub桌面。

+0

我已經下載了可移植的git,但我無法將它添加到我的路徑使用其他帖子中的命令。有什麼我失蹤? –

+0

你可以用你輸入的命令編輯你的文章。另外請確保從同一個CMD會話啓動GitHub桌面。 – VonC

+0

我在你的其他帖子中一行一行地輸入了正確的內容,沒有任何變化。每次我進入時,什麼都沒有發生。 –

0
votes
answers
37 views
+10

VS代碼 - 接受傳入更改不顯示版本1.18

0

我想解決合併衝突到分支使用vs代碼。然而,命令調色板接受傳入的變化沒有出現VS代碼 - 接受傳入更改不顯示版本1.18

enter image description here

不像here where the command palette是在頂部窗口清晰可見。

請幫助!我如何讓這些命令出現在窗口頂部?

沙发
0
1

我想你正在尋找this toolbar:(從這個Microsoft Repo圖片)

VS Code merge conflict toolbar

此工具欄只有當出現:

  1. 有任何合併衝突和
  2. 當前文件處於「MERGE」 VS碼的版本控制面板部分

從我在截圖中看到的確實在「MERGE」部分有一個文件。我無法確定這是否也是您打開的文件(Address.js)。

Address.js似乎沒有衝突標記。在Git中,衝突標記看起來像這樣:

<<<<<<< HEAD 
    ... 
======= 
    ... 
>>>>>>> master 

你的情況好像變化是由git的自動合併,沒有衝突,這意味着你正在尋找不會出現在這裏的工具欄。

0
votes
answers
70 views
+10

gitlab通過golang抓取的問題

1

我是編程新手,我需要幫助。試圖在golang上編寫gitlab scraper。 當我試圖在多線程模式下獲取有關項目的信息時,出現了一些問題。gitlab通過golang抓取的問題

下面是代碼:

func (g *Gitlab) getAPIResponce(url string, structure interface{}) error { 
    responce, responce_error := http.Get(url) 
    if responce_error != nil { 
     return responce_error 
    } 
    ret, _ := ioutil.ReadAll(responce.Body) 
    if string(ret) != "[]" { 
     err := json.Unmarshal(ret, structure) 
     return err 
    } 
    return errors.New(error_emptypage) 
} 

... 

func (g *Gitlab) GetProjects() { 
    projects_chan := make(chan Project, g.LatestProjectID) 
    var waitGroup sync.WaitGroup       
    queue := make(chan struct{}, 50)          
    for i := g.LatestProjectID; i > 0; i-- {    
     url := g.BaseURL + projects_url + "/" + strconv.Itoa(i) + g.Token 
     waitGroup.Add(1) 
     go func(url string, channel chan Project) { 
      queue <- struct{}{} 
      defer waitGroup.Done() 

      var oneProject Project 
      err := g.getAPIResponce(url, &oneProject) 
      if err != nil { 
       fmt.Println(err.Error()) 
      } 

      fmt.Printf(".") 
      channel <- oneProject 
      <-queue 
     }(url, projects_chan) 
    } 

    go func() { 
     waitGroup.Wait() 
     close(projects_chan) 
    }() 

    for project := range projects_chan { 
     if project.ID != 0 { 
      g.Projects = append(g.Projects, project) 
     } 
    } 
} 

這裏是輸出:

┌[ nb-kondrashov: ~/Gitlab/gitlab-auditor ] 
└[ skondrashov ]-> ./gitlab-auditor 
latest project = 1532 
Gathering projects... 
.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................Get https://gitlab.example.com/api/v4/projects/563&private_token=SeCrEt_ToKeN: unexpected EOF 
Get https://gitlab.example.com/api/v4/projects/558&private_token=SeCrEt_ToKeN: unexpected EOF 
..Get https://gitlab.example.com/api/v4/projects/531&private_token=SeCrEt_ToKeN: unexpected EOF 
Get https://gitlab.example.com/api/v4/projects/571&private_token=SeCrEt_ToKeN: unexpected EOF 
.Get https://gitlab.example.com/api/v4/projects/570&private_token=SeCrEt_ToKeN: unexpected EOF 
..Get https://gitlab.example.com/api/v4/projects/467&private_token=SeCrEt_ToKeN: unexpected EOF 
Get https://gitlab.example.com/api/v4/projects/573&private_token=SeCrEt_ToKeN: unexpected EOF 
................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ 

每當它的不同的項目,但它的id是大約550

當我試圖從輸出中扼制鏈接,我得到正常的JSON。當我試圖用queue := make(chan struct{}, 1)(單線程)運行這段代碼時 - 一切都很好。

它可能是什麼?

+2

嘗試限制同時連接的數量。 –

+0

我想在這裏做:'queue:= make(chan struct {},N)'(N =連接數),並且它有部分幫助,但是我失去了性能。這是gitlab,golang或我的電腦的問題嗎? – sergkondr

+1

我想50是太多了。可能存在某種限制連接數量的DDoS保護。嘗試減少,例如5或10. –

沙发
0
1

我會說這不是一個非常明確的方法來實現併發。 whhat似乎是這裏發生的是

  • 您創建的大小爲50

  • 緩衝通道,那麼你火了1532個夠程

  • 他們的第一個50本身排隊並開始處理。當他們< - 排隊並釋放一些空間時,下一個隨機的一個管理員進入隊列。

  • 正如人們在評論中所說的那樣,當然你在某些限制的範圍內遇到了一些限制,比如說550 gitlab的API對你感到憤怒並且限制了速度。

  • 然後另一個夠程進行燒製,將關閉通道通知主夠程

  • 主夠程讀取消息。

談話go concurrency patterns 以及這個博客帖子concurrency in go可能的幫助。 我個人很少使用緩衝頻道。你的問題,我會是這樣的:

  • 定義多個工人

  • 有主夠程火了一個FUNC聽INTS的通道上,這樣做的API調用,寫工人一個項目的渠道

  • 有主要的goroutine發送到一個項目編號的渠道,從項目的渠道中讀取和讀取。

    • 也許ratelimit通過發射一個代碼,並有主讀取之前它發送下一個請求?
  • 主要關閉號碼通道以通知其他人死亡。

+0

感謝您的回答,特別感謝鏈接到「去併發模式」。我已經通過限制線程數量並根據Eugene Lisitsky的回答調整Gitlab來解決了這個問題 – sergkondr

0
votes
answers
53 views
+10

go-git:如何在遠程服務器上進行身份驗證?

0

我使用go項目go-git作爲git-client,並想從通過gitea託管的私有git存儲庫中獲取。go-git:如何在遠程服務器上進行身份驗證?

執行此操作的相應功能是func (r *Remote) Fetch(o *FetchOptions) error,它需要transport.AuthMethod對象進行身份驗證。

我試過如下:

repo, _ := git.PlainOpen("/path/to/project/folder") 
err := repo.Fetch(&git.FetchOptions{ 
    Auth: http.NewBasicAuth("someUser", "andThePassword"), 
}) 

...這只是返回:

無效的授權方法

如果我使用

authenticator, _ := ssh.NewSSHAgentAuth("git") 
同樣的情況,

從包"gopkg.in/src-d/go-git.v4/plumbing/transport/ssh"

並且如果我使用證書:

authenticator, _:= ssh.NewPublicKeysFromFile("gitea name", "/home/name/.ssh/id_rsa", "passphrase") 

如何找出哪個身份驗證方法的支持,並在那裏的transport.AuthMethod,我可以用現有的實現?

+0

您的使用看起來正確的我,也許有一個bug?該項目最近有一個問題[#618](https://github.com/src-d/go-git/issues/618),可能表明有用的解決方法:'&git.CloneOptions {URL:「https: //user:[email protected]/repo.git「}' – orirawlings

+0

@orirawlings這樣的url只能在克隆新存儲庫時應用。當我已經擁有本地版本庫時,我用'PlainOpen'打開它,然後使用'Fetch',爲此我無法再指定URL。 (URL是從'.git/config'文件中獲得的,即使我在那裏修改了url,它也會返回「invalid auth method」 – maja

+0

你使用哪種協議?HTTP或者SSH?或者git? – mcuadros

沙发
0
0

這裏的問題是,我使用了錯誤的http-package來獲取authenticator。

我使用了包net/http中的BasicAuth() - 但是,要使用的正確http包是gopkg.in/src-d/go-git.v4/plumbing/transport/http

更改導入並從那裏使用(兼容)BasicAuth-authenticator時,它可以完美地工作。

板凳
0
0

這個工作對我gopkg.in/src-d/go-git.v4

func cloneGit() (err error) { 
    username := "dude" 
    password := "super-secret-Personal-access-token" 
    repo := "github.build.company.com/org/repo-name.git" 
    url := fmt.Sprintf("https://%s:%[email protected]%s", username, password, repo) 
    options := git.CloneOptions{ 
     URL:  url, 
     Progress: os.Stdout, 
    } 
    r, err := git.PlainClone("./src", false, &options) 

    if err != nil { 
     return err 
    } 
    fmt.Println(r.Log) 
    return err 
} 
0
votes
answers
42 views
+10

使用SAS對不平衡面板數據進行插值

0

假設我們僅限於使用SAS並具有面板/縱向數據集。我們有隊列和時間指標,以及一些測量變量y使用SAS對不平衡面板數據進行插值

data in; 
input cohort time y; 
datalines; 
1 1 100 
1 2 101 
1 3 102 
1 4 103 
1 5 104 
1 6 105 
2 2 . 
2 3 . 
2 4 . 
2 5 . 
2 6 . 
3 3 . 
3 4 . 
3 5 . 
3 6 . 
4 4 108 
4 5 110 
4 6 112 
run; 

注意,隊列和時間的單位是相同的,所以,如果數據集出去時間單元6中,每個連續的面板單元將是一個週期比在時間之前它的一個更短。

我們在實際數據之間有兩個面板單位的差距。我們的目標是從兩個「夾心」它們的線性內插兩個缺失的面板單元(第2組和第3組的值)。對於時間5處的羣組2,內插值應該是0.67*104 + 0.33*110,而對於時間5處的羣組3,它將是0.33*104 + 0.67*110。基本上你只是用實際的重量較輕的面板單元重量的2/3,而另一個面板單元的重量只有1/3。你當然會有缺失的值,但對於這個玩具的例子來說,這不是問題。

我想象的解決方案涉及滯後和使用first.運算符和循環,但我的SAS是如此之差,我猶豫提供甚至我破碎的代碼示例。

+0

發佈您到目前爲止所嘗試的內容。你有SAS/ETS嗎? – Reeza

沙发
0
0

我有一個解決方案,但它是折磨。必須有一個更好的方法來做到這一點,這在Stata需要一條線。

首先,我們使用proc SQL,使兩個填充面板單位,

proc sql; 
create table haveY as 
select time, cohort, y 
from startingData 
where y is not missing 
order by time, cohort; 

quit; 

接下來我們遍歷這個減少數據集的行「夾心麪包」,以產生內插值,我不的表我完全遵循這裏的操作,我修改了我找到的一個相關示例。

data wantY; 
set haveY(rename=(y=thisY cohort=thisCohort)); 
by time; 

retain lastCohort lastY; 
lastcohort = lag(thisCohort); 
lastY = lag(thisY); 
if not first.time then do; 
    do cohort = lastCohort +1 to thisCohort-1; 
    y = ((thisCohort-cohort)*lastY + (cohort-lastCohort)*thisY)/(thisCohort-lastCohort); 
    output; 
    end; 
end; 
cohort=thisCohort; 
y=thisY; 
drop this: last:; 
run; 

proc sort data=work.wantY; 
by cohort time; 
run; 

這不會產生所需要的,它可以使用proc sql進入首發表中加入:startingData。由於冗長而不是完全令人滿意的解決方案,但它確實有效。

0
votes
answers
46 views
+10

是否有任何git命令會明確地銷燬提交?

0

Git是否真的會摧毀提交或者只是孤兒?我知道,git垃圾收集器將刪除孤立的提交時運行與git gc在任何間隔設置在git配置。是否還有其他情況會刪除提交?是否有任何git命令會明確地銷燬提交?

沙发
0
2

Git最終可能會真正銷燬一些對象,包括未提交的提交;但它可能不會。爲了達到這個目的,請仔細閱讀。

最直接的控制可通過git prunegit repackgit prune-packed獲得。運行git gc運行所有這些,以及更多。假設git prune或甚至是git gc --prune=now將會訣竅的主要問題是現在無法訪問的對象可能是打包的

通常,您應該首先終止reflogs,因爲刪除過期的reflog條目可能會導致對象無法訪問。使用git gc以相對安全的方式以正確的順序完成所有這些工作:首先過濾reflogs,然後修剪(仔細地),然後重新打包,然後修剪打包。 prune步驟寬鬆未參考的對象自己過期。 之後,其他步驟重新包裝正在使用的舊對象,並刪除剛剛打包的對象。

這一系列事件就是爲什麼我們需要git repack -d或甚至-ad,其次是git prune-packed。但是,如果某些包標有.keep文件,則這些包將保留,如果包含其他未引用的對象,則這些對象也將保留。


由於多個GIT中的命令可以並行地運行,這是明智的提供,在此期間未引用的對象住,在情況下,他們將要成爲引用的寬限期。請注意,它是git gc,它插入默認的14天寬限期; git prune默認爲--expire=now而不是--expire=2.weeks.ago。這給Git命令336小時完成他們的工作和水泥參考:例如,git commit運行git write-tree其次是git commit-tree,並且此樹和提交都未被引用,直到git commit也更新當前分支名稱。通常情況下,整個過程只需要幾毫秒,因此336小時應該足夠的時間。

板凳
0
1

git-prune有刪除孤兒對象的明確任務聲明。